Трассировочный объект имеет следующие атрибуты:
• >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()
В результате получается примерно следующее:
>(
>
>
>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()
дает кортеж с информацией о возбужденном исключении (класс исключения, объект исключения и трассировочный объект). Элементы этого кортежа передаются как параметры функции >traceback.format_exception()
, которая и печатает информацию об исключении в уже знакомой форме. Модуль >traceback
содержит и другие функции (о них можно узнать из документации), которые помогают форматировать те или иные части информации об исключении.
Разумеется, это еще не все возможности модуля inspect и свойств интроспекции в Python, а лишь наиболее интересные функции и атрибуты. Подробнее можно прочитать в документации или даже в исходном коде модулей стандартной библиотеки Python.
Заключение
С помощью возможностей интроспекции удается рассмотреть фазы работы транслятора Python: лексический анализ, синтаксический разбор и генерации кода для интерпретатора, саму работу интерпретатора можно видеть при помощи отладчика.
Вместе с тем, в этой лекции было дано представление об использовании профайлера для исследования того, на что больше всего тратится процессорное время в программе, а также затронуты некоторые аспекты оптимизации Python-программ и варианты оптимизации кода на Python по скорости.
Наконец, интроспекция позволяет исследовать не только строение программы, но и объектов, с которыми работает эта программа. Были рассмотрены возможности Python по получению информации об объектах — этом основном строительном материале, из которого складываются данные любой Python–программы.