Некоторые атрибуты модуля 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