Обработка исключений Python

C имеет perror и errno, которые печатают и сохраняют последнюю обнаруженную ошибку. Это удобно при выполнении файла io, так как мне не нужно 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...

Ответы

Ответ 1

Исключение имеет атрибут errno:

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

Ответ 2

Вот как вы можете это сделать. Также см. Модуль 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:

Ответ 3

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