Язык программирования Python
Шрифт:
Трассировочный объект представляет содержимое стека исполнения от места возбуждения исключения до места его обработки. В обработчике исключений связанный с исключением трассировочный объект доступен посредством функции sys.exc_info (это третий элемент возвращаемого данной функцией кортежа).
Трассировочный
tb_frame Фрейм исполнения текущего уровня.
tb_lineno и tb_lasti Номер строки и инструкции, где было возбуждено исключение.
tb_next Следующий уровень стека (другой трассировочный объект).
Одно из наиболее частых применений модуля traceback — «мягкая» обработка исключений с выводом отладочной информации в удобном виде (в лог, на стандартный вывод ошибок и т.п.):
Листинг
#!/usr/bin/python
def dbg_except:
«"«Функция для отладки операторов try–except»""
import traceback, sys, string
print sys.exc_info
print " ".join(traceback.format_exception(*sys.exc_info))
def bad_func2:
raise StandardError
def bad_func:
bad_func2
try:
bad_func
except:
dbg_except
В результате получается примерно следующее:
Листинг
(<class exceptions.StandardError at 0x4019729c>,
<exceptions.StandardError instance at 0x401df2cc>,
<traceback object at 0x401dcb1c>)
Traceback (most recent call last):
File «pr143.py», line 17, in ?
bad_func
File «pr143.py», line 14, in bad_func
bad_func2
File «pr143.py», line 11, in bad_func2
raise StandardError
StandardError
Функция sys.exc_info
Разумеется, это еще не все возможности модуля inspect и свойств интроспекции в Python, а лишь наиболее интересные функции и атрибуты. Подробнее можно прочитать в документации или даже в исходном коде модулей стандартной библиотеки Python.
Заключение
С помощью возможностей интроспекции удается рассмотреть фазы работы транслятора Python: лексический анализ, синтаксический разбор и генерации кода для интерпретатора, саму работу интерпретатора можно видеть при помощи отладчика.
Вместе с тем, в этой лекции было дано представление об использовании профайлера для исследования того, на что больше всего тратится процессорное время в программе, а также затронуты некоторые аспекты оптимизации Python–программ и варианты оптимизации кода на Python по скорости.
Наконец, интроспекция позволяет исследовать не только строение программы, но и объектов, с которыми работает эта программа. Были рассмотрены возможности Python по получению информации об объектах — этом основном строительном материале, из которого складываются данные любой Python–программы.