×
Traktatov.net » Язык программирования Python » Читать онлайн
Страница 141 из 141 Настройки

Трассировочный объект имеет следующие атрибуты:

• >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–программы.