programing

FileNotFound 오류를 올바르게 발생시키는 방법은 무엇입니까?

muds 2023. 5. 11. 21:58
반응형

FileNotFound 오류를 올바르게 발생시키는 방법은 무엇입니까?

타사 라이브러리를 사용하는데, 이 라이브러리는 문제가 없지만 존재하지 않는 파일은 원하는 방식으로 처리하지 않습니다.오래된 파일을 올리는 대신 존재하지 않는 파일을 제공할 때

FileNotFoundError: [Errno 2] No such file or directory: 'nothing.txt'

그것은 몇 가지 모호한 메시지를 제기합니다.

OSError: Syntax error in file None (line 1)

누락된 파일을 처리하고 싶지 않습니다. 예외를 잡거나 처리하고 싶지 않습니다. 사용자 지정 예외를 제기하고 싶지도 않습니다.open파일이 존재하지 않는 경우 파일을 만들지 않습니다.

나는 그것이 존재하는지만 확인하고 싶습니다.os.path.isfile(filename)트릭을 수행합니다. 그렇지 않으면 적절한 FileNotFoundError를 발생시킵니다.

시도해 봤습니다.

#!/usr/bin/env python3

import os

if not os.path.isfile("nothing.txt"):
    raise FileNotFoundError

출력만 하는 항목:

Traceback (most recent call last):
  File "./test_script.py", line 6, in <module>
    raise FileNotFoundError
FileNotFoundError

이것은 "파일 없음의 구문 오류"보다 낫지만, 어떻게 재구현하지 않고 적절한 메시지로 "실제" 파이썬 예외를 제기할 수 있습니까?

인수 전달:

import errno
import os

raise FileNotFoundError(
    errno.ENOENT, os.strerror(errno.ENOENT), filename)

FileNotFoundError의 하위 클래스로, 여러 인수를 사용합니다.첫 번째는 모듈의 오류 코드입니다(파일을 찾을 수 없음은 항상 있음).errno.ENOENT), 두 번째 오류 메시지(이 메시지를 가져오는 데 사용), 세 번째로 파일 이름을 전달합니다.

추적백에 사용되는 마지막 문자열 표현은 다음 인수로 구성됩니다.

>>> print(FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), 'foobar'))
[Errno 2] No such file or directory: 'foobar'

파이썬에서 변수는 유형(클래스) 또는 객체(클래스의 인스턴스)를 나타낼 수 있습니다.

>>> x = FileNotFoundError
>>> print(type(x))
<class 'type'>

>>> x = FileNotFoundError()
>>> print(type(x))
<class 'FileNotFoundError'>

타입을 던지는 것도 가능하지만, FileNotFoundError당신은 사실상 항상 클래스에서 생성된 물체를 던지기를 원합니다.생성자가 OSError와 동일한 인수를 허용합니다.표준 POSIX 및 Windows 오류 코드를 전달할 수 있지만 오류 메시지를 전달하기에 충분합니다.(사용자의 경우 디렉토리가 발견된 경우 오류도 발생하므로 표준 오류 메시지 "No such file or directory"가 완전히 정확하지는 않습니다.)

if not os.path.isfile("nothing.txt"):
    raise FileNotFoundError("nothing.txt was not found or is a directory")

언급URL : https://stackoverflow.com/questions/36077266/how-do-i-raise-a-filenotfounderror-properly

반응형