Атрибут traceback
Атрибут traceback применяется к экземпляру класса
HTTPError и содержит объект трассировки стека
(объект типа traceback из стандартного модуля
traceback). Если HTTP-ошибка была вызвана другим
исключением, переданным в параметре exception,
то в этом атрибуте будет храниться трассировка этого
исключения. Если же исключение не передавалось, значение
атрибута будет равно None. Атрибут доступен только
для чтения и заполняется автоматически в момент создания
объекта ошибки.
Синтаксис
error.traceback
Пример
Давайте создадим объект HTTPError без связанного
исключения и проверим значение атрибута:
from bottle import HTTPError
error = HTTPError(404, 'Not Found')
res = error.traceback
print(res)
Результат выполнения кода:
None
Пример
Давайте передадим в конструктор HTTPError реальное
исключение и посмотрим, что попадёт в атрибут
traceback:
from bottle import HTTPError
try:
raise ValueError('bad value')
except ValueError as exc:
error = HTTPError(500, 'Server Error', exception=exc)
res = error.traceback
print(type(res).__name__)
print(res.tb_frame.f_code.co_name)
Результат выполнения кода:
"traceback"
"<module>"
Пример
Давайте выведем полную трассировку стека из атрибута
traceback с помощью стандартного модуля
traceback:
import traceback
from bottle import HTTPError
try:
raise ValueError('bad value')
except ValueError as exc:
error = HTTPError(500, 'Server Error', exception=exc)
traceback.print_tb(error.traceback)
Результат выполнения кода:
File "app.py", line 5, in <module>
raise ValueError('bad value')
Пример
Давайте обработаем ошибку в приложении Bottle и передадим информацию о трассировке в ответ:
import traceback
from bottle import Bottle, HTTPError
app = Bottle()
@app.route('/')
def index():
try:
raise ValueError('bad value')
except ValueError as exc:
raise HTTPError(500, 'Server Error', exception=exc)
@app.error(500)
def handle_500(error):
if error.traceback is not None:
return traceback.format_tb(error.traceback)[-1]
return 'no traceback'
Результат выполнения кода для адреса /: