Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 21, 2015 11:31:59

PyNovice
Зарегистрирован: 2014-09-18
Сообщения: 17
Репутация: +  2  -
Профиль   Отправить e-mail  

Вывод traceback в finally

Например есть код:

try:
    run()
except error.Exception:
    # отлов известной ошибки
    print('Exception')
finally:
    # print(traceback) если except не сработал
Собственно вопрос в том как можно через finally вывести traceback если except не выловил исключение, и соответственно ничего не вводить если программа отрабатывает в нормальном режиме.
Вообще цель - отловить известное исключение, и получить информацию о тех которые еще не выловлены. Или может это как-то можно более грамотно сделать?

Отредактировано PyNovice (Ноя. 21, 2015 11:32:59)

Офлайн

#2 Ноя. 21, 2015 12:30:43

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Вывод traceback в finally

try:
    run()
except error.Exception:
    # отлов известной ошибки
    print('Exception')
else:
    print("except не сработал")

finally нужен для других целей.



Отредактировано ZZZ (Ноя. 21, 2015 12:31:05)

Офлайн

#3 Ноя. 21, 2015 16:18:28

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Вывод traceback в finally

мне нравится короткий вариант.

try:
raise Exception("aaa")
except:
print("badexcept")
>>>
badexcept

вообще traceback будет выведен по умолчанию. Ничего делать не надо.



Офлайн

#4 Ноя. 22, 2015 01:09:08

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Вывод traceback в finally

PyNovice
есть такой модуль traceback там есть функция format_exc() думаю она вам будет интересна, как и модуль в целом



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Ноя. 22, 2015 17:00:45

PyNovice
Зарегистрирован: 2014-09-18
Сообщения: 17
Репутация: +  2  -
Профиль   Отправить e-mail  

Вывод traceback в finally

doza_and
вообще traceback будет выведен по умолчанию. Ничего делать не надо.
Это небольшой бот с использованием Grab, запускаю просто через файл с исходником, и в результате работы иногда вылетают ошибки связанные с соединением, таймаут конечно самая простая, ее обработал, а вот еще какая-то бывает редко и она заканчивают работу скрипта. Можно конечно отлавливать все исключения и как советовал JOHN_16
print(traceback.format_exc())
ловить пока все не выловишь, просто думал может как-то более это красиво сделать: одну обрабатываем и печатаем вторую когда она появляется чтобы потом так же ее обработать.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version