2009-07-15 8 views
16

C에는 perror 및 errno가 있으며 마지막으로 발생한 오류를 인쇄하고 저장합니다. fopen()에 대한 인수로 실패한 모든 파일을 fstat() 할 필요가 없으므로 파일 호출이 실패한 이유를 사용자에게 알리기 때문에 파일 io를 수행 할 때 편리합니다.파이썬 예외 처리

나는 정상적으로 python에서 IOError 예외를 처리 할 때 errno를 잡는 적절한 방법이 무엇인지 궁금합니다.

 
In [1]: fp = open("/notthere") 
--------------------------------------------------------------------------- 
IOError         Traceback (most recent call last) 

/home/mugen/ in() 

IOError: [Errno 2] No such file or directory: '/notthere' 


In [2]: fp = open("test/testfile") 
--------------------------------------------------------------------------- 
IOError         Traceback (most recent call last) 

/home/mugen/ in() 

IOError: [Errno 13] Permission denied: 'test/testfile' 


In [5]: try: 
    ...:  fp = open("nothere") 
    ...: except IOError: 
    ...:  print "This failed for some reason..." 
    ...:  
    ...:  
This failed for some reason... 

답변

26

예외는 errno 속성이 있습니다 :

여기
try: 
    fp = open("nothere") 
except IOError as e: 
    print(e.errno) 
    print(e) 
23

당신이 그것을 할 수있는 방법입니다. 일부 유틸리티의 경우 errno 모듈과 os.strerror 기능을 참조하십시오.

: 기본 클래스 EnvironmentError를 참조 속성 IO 오류에 대한 자세한 내용은

import os, errno 

try: 
    f = open('asdfasdf', 'r') 
except IOError as ioex: 
    print 'errno:', ioex.errno 
    print 'err code:', errno.errorcode[ioex.errno] 
    print 'err message:', os.strerror(ioex.errno) 

0

+1

허용되는 답변보다 좋습니다! – RichVel

+0

'ioex.strerror'는'os.strerror (ioex.errno)'와 같습니다. (파이썬 2.7) – Dannid

20
try: 
    fp = open("nothere") 
except IOError as err: 
    print err.errno 
    print err.strerror 
+9

이것은 현재 선호되는 문법입니다. 현재이 질문을 보는 사람들을위한 FYI ... – 2rs2ts

+1

python3에서 작동합니다 인쇄물에 중괄호를 쓰면 – 2114L3