Исключения в Python обработки

C имеет perror и errno, которые печатают и хранят последнюю обнаруженную ошибку. Это удобно при выполнении ввода-вывода файла, поскольку мне не нужно fstat() каждый файл, который не работает в качестве аргумента для fopen (), чтобы представить пользователю причину сбоя вызова.

мне было интересно, Как правильно захватить errno при изящной обработке исключения IOError в python?

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...

4 ответов


исключение имеет :

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

вот как вы можете сделать это. Также см. errno модуль


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

различные исключения также могут быть проверены в том же предложении "except", например

try:
    serial_port.open()
except (AttributeError, SerialException) as e:
    print('cannot open serial port: {}'.format(e))