Сведения об исключениях

svedeniya ob iskljucheniyah Системные инструменты

Некоторые атрибуты модуля sys позволяют получить все сведения о самом последнем исключении, возбужденном интерпретатором Python. Это удобно, когда требуется реализовать обобщенную процедуру обработки исключений. Например, функция sys.exc_info возвращает кортеж, содержащий тип последнего исключения, его значение и объект с трассировочной информацией. В модели исключений, которая в Python 3 полностью основана на классах, первые два элемента кортежа соответствуют классу последнего исключения и его экземпляру:

>>> try:

raise IndexError

except:

print(sys.exc_info())

(<class ‘IndexError’>, IndexError(), <traceback object at 0x019B8288>)

Эту информацию можно использовать для создания собственного сообщения об ошибке, выводимого в окне диалога графического интерфейса или в веб-странице HTML (напомню, что не обработанные исключения по умолчанию завершают программы с выводом сообщения об ошибке). Первые два элемента кортежа, возвращаемого этой функцией, по умолчанию предусматривают вывод полезной информации, а третий элемент, объект с трассировочной информацией, можно обработать с помощью стандартного модуля traceback:

>>> import traceback, sys

>>> def grail(x):

raise TypeError(‘already got one’)

>>> try:

grail(‘arthur’)

except:

exc_info = sys.exc_info()

print(exc_info[0])

print(exc_info[1])

traceback.print_tb(exc_info[2])

<class ‘TypeError’> already got one

File “<stdin>”, line 2, in <module>

File “<stdin>”, line 2, in grail

Модуль traceback может также представлять сообщения в виде строк и записывать их в указанный объект файла — более подробную информацию вы найдете в руководстве по библиотеке Python.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий