Python异常处理

问题描述:

C有perror和errno,它会打印并存储遇到的最后一个错误。这在做文件io时很方便,因为我不必为每个失败的文件fstat()作为fopen()的参数来向用户展示调用失败的原因。Python异常处理

我想知道在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... 

例外有一个errno属性:

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

这里是你如何能做到这一点。另请参阅errno模块和os.strerror函数的某些实用程序。

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) 

有关的IOError属性的更多信息,请参阅基类EnvironmentError:

+1

比接受的答案更好! – RichVel 2013-01-21 19:04:58

+0

`ioex.strerror`似乎相当于`os.strerror(ioex.errno)`(python 2.7) – Dannid 2016-06-28 16:13:14

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