Сообщение об исключении (Python 2.6)
В 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-except, например:
try:
pkl_file = open('monitor.dat', 'rb')
monitoring_pickle = pickle.load(pkl_file)
pkl_file.close()
except Exception:
print 'No such file or directory'
Как я мог в catch catch Exception напечатать следующую строку?
File "C:\Python_tests\Exception_Handling\src\exception_handling.py",
line 11, in <module>
pkl_file = open('monitor.dat', 'rb')
Таким образом, программа не выйдет.
Ответы
Ответ 1
Отправляет сообщение об ошибке:
except Exception, e:
print "Couldn't do it: %s" % e
Это покажет всю трассировку:
import traceback
# ...
except Exception, e:
traceback.print_exc()
Но вы можете не захотеть поймать Исключение. Чем уже вы можете сделать свой улов, тем лучше. Поэтому вы можете попробовать:
except IOError, e:
вместо этого. Кроме того, что касается сужения обработки исключений, если вы беспокоитесь только о недостающих файлах, тогда установите try-except только вокруг open:
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()
Ответ 2
Если вы хотите захватить объект исключения, переданный Exception, лучше начать использовать формат NEW, введенный в 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.
Ответ 3
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()
Ответ 4
Спасибо всем.
Вот что мне нужно:)
import traceback
try:
# boom
except Exception:
print traceback.format_exc()