Сообщение об исключении (Python 2.6) - PullRequest
35 голосов
/ 11 ноября 2009

В Python, если я открываю двоичный файл, который не существует, программа завершает работу с ошибкой и печатает:

Traceback (most recent call last):
  File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
  line 4, in <module>
  pkl_file = open('monitor.dat', 'rb')
  IOError: [Errno 2] No such file or directory: 'monitor.dat'

Я могу справиться с этим с помощью «try-Кроме», как:

try:
    pkl_file = open('monitor.dat', 'rb')
    monitoring_pickle = pickle.load(pkl_file)
    pkl_file.close()
except Exception:
    print 'No such file or directory'

Как я могу в перехваченном Исключении напечатать следующую строку?

File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
line 11, in <module>
pkl_file = open('monitor.dat', 'rb')

Таким образом, программа не будет завершена.

Ответы [ 4 ]

90 голосов
/ 11 ноября 2009

Это печатает сообщение об исключении:

except Exception, e:
    print "Couldn't do it: %s" % e

Это покажет весь след:

import traceback

# ...

except Exception, e:
    traceback.print_exc()

Но вы можете не захотеть поймать Исключение. Чем уже вы можете сделать свой улов, тем лучше. Так что вы можете попробовать:

except IOError, e:

вместо этого. Также по вопросу сужения обработки исключений, если вас интересуют только отсутствующие файлы, тогда сделайте попытку-исключение только вокруг открытия:

try:
    pkl_file = open('monitor.dat', 'rb')
except IOError, e:
    print 'No such file or directory: %s' % e

monitoring_pickle = pickle.load(pkl_file)
pkl_file.close()
22 голосов
/ 11 ноября 2009

Если вы хотите захватить объект исключения, переданный Exception, лучше начать использовать новый формат, представленный в Python 2.6 (который в настоящее время поддерживает оба), потому что это будет единственный способ сделать это в Python 3.

И это:

try:
    ...
except IOError as e:
    ...

Пример:

try:
    pkfile = open('monitor.dat', 'rb')
except IOError as e:
    print 'Exception error is: %s' % e

Подробный обзор можно найти в документации Что нового в Python 2.6 .

9 голосов
/ 11 ноября 2009

Python имеет модуль traceback .

import traceback
try:
    pkl_file = open('monitor.dat', 'rb')
    monitoring_pickle = pickle.load(pkl_file)
    pkl_file.close()
except IOError:
    traceback.print_exc()
6 голосов
/ 11 ноября 2009

Спасибо за все.

Вот что мне было нужно:)

import traceback

try:
    # boom
except Exception:
    print traceback.format_exc()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...