2014-11-04 2 views
12

현재 Python 3 기본 제공 예외가 필요한 프로젝트에서 Python 2를 사용하고 있습니다 : . 어떻게해야합니까?Python 3에서 FileNotFoundError를 어떻게 가져 옵니까?

+0

당신은 그렇게 할 수 없습니다. 왜 예외를 정의하지 않는 것이 좋을까요? –

+0

'시도 '다음에'제외 : 통과 ' – Hackaholic

+7

@Hackaholic Err ... no. 왜 그걸하고 싶습니까? –

답변

20

물론 원하는 예외를 정의 할 수 있습니다.

그러나 그들은 당신을 좋아하지 않을 것입니다. FileNotFoundError의 요점은 파일을 찾을 수없는 오류로 실행되는 모든 파이썬 연산이 그 예외를 발생 시킨다는 것입니다. 자신의 예외를 정의하는 것만으로는 알 수 없습니다. 얻을 수있는 것은 errno 값을 가진 OSError (또는 2.x 버전에 따라 IOError)입니다. 사용자 정의 FileNotFoundError을 처리하려고하면 핸들러가 호출되지 않습니다.

그럼, 당신이 정말로 원하는 것은 (예를 들어)입니다 :

try: 
    f = open(path) 
except OSError as e: 
    if e.errno == errno.ENOENT: 
     # do your FileNotFoundError code here 
    else: 
     raise 
+2

[올바른 예외는 IOError] (https://docs.python.org/2/library/exceptions.html#exceptions.IOError)와 같습니다. – Mansour

+2

@ 맨수르 : 2.6-2.7에 대해,이 두 개는 꽤 깔끔하게 나뉘어져 있습니다. 이전 버전 (특히 CPython을 사용하지 않는 경우)은 다른 이야기입니다 (소켓 연결 오류와 같은 몇 가지 사항이있었습니다). 그러므로 "2.x 버전에 의존"합니다. 안전을 위해 둘 다 항상 잡을 수 있습니다 (또는 1.5로 돌아갈 필요가없는 한) 공통 하위 클래스 인 EnvironmentError를 잡을 수 있습니다. – abarnert

+0

나는 텍스트를 완전히 무시하면서 예제를 읽었다! – Mansour

2

당신은 단순히 자신이 FileNotFoundError 예외를 만들 수 있습니다

class FileNotFoundError(OSError): 
    pass 

이 새로운 예외 클래스는 파이썬 3.x에서의 일처럼 OSError에서 상속

여기는 파이썬에서 User-defined Exceptions에 대한 참조입니다.

2

대신 IOError을 사용할 수

제기 할 때와 같은 인쇄 문 같은 I/O 작업 (즉, I/O 관련 이유로 예 : "파일을 찾을 수 없음" 또는 "디스크 꽉 참"과 같은 기본 제공 open() 함수 또는 파일 객체의 메서드)가 실패합니다.

이 클래스는 EnvironmentError에서 파생되었습니다. 예외 인스턴스 속성에 대한 자세한 정보는 위의 설명을 참조하십시오.

버전 2.6에서 변경됨 :이 클래스를 기본 클래스로 사용하도록 socket.error가 변경되었습니다.

+0

더 많은 컨텍스트를 제공 할 수 있습니까? 보통 한 문장의 대답으로는 충분하지 않습니다. – sadmicrowave

+0

설명서에 대한 링크 또는 견적은 훌륭합니다. ^^ 훨씬 포괄적입니다 +1 – sadmicrowave

+1

견적을 추가했습니다. "파일을 찾을 수 없음"부분을 강조 표시했습니다 :-) –

관련 문제