EDIT: после прочтения комментариев и ответов я понимаю, что то, что я хочу сделать, не имеет большого смысла. Я имел в виду, что у меня есть некоторые места в моем коде, которые могут потерпеть неудачу (обычно некоторые
requests
звонки, которые могут не пойти), и я хотел их поймать вместо , помещаяtry:
всюду. Моя конкретная проблема была такой, что я бы не беспокоился, если они потерпят неудачу и не повлияет на остальную часть кода (скажем, вызов сторожевого таймера).как поймать все неперехваченные исключения и продолжить?Я оставлю этот вопрос для будущих поколений, как ода «думать о реальной проблемы, а затем спросить:»
Я пытаюсь обрабатывать все пойманные (в противном случае необработанные) исключения:
import traceback
import sys
def handle_exception(*exc_info):
print("--------------")
print(traceback.format_exception(*exc_info))
print("--------------")
sys.excepthook = handle_exception
raise ValueError("something bad happened, but we got that covered")
print("still there")
Это выводит
--------------
['Traceback (most recent call last):\n', ' File "C:/Users/yop/.PyCharm50/config/scratches/scratch_40", line 10, in <module>\n raise ValueError("something bad happened, but we got that covered")\n', 'ValueError: something bad happened, but we got that covered\n']
--------------
Таким образом, в то время как повышение действительно поймали, он не сделал работайте так, как я думал: звонок в handle_exception
, затем возобновите работу с print("still there")
.
Как это сделать?
Вы не можете, и это не разумно, что нужно сделать - что, если плохо означает, что переменная не установлена?Если вы запустите следующую строку, которая теперь называется 'NameError'? – Eric
Вы пытаетесь сделать что-то вроде https://github.com/ajalt/fuckitpy – jonrsharpe
@jonrsharpe: после некоторого фактического мышления - да, я так думаю. Я обновляю свой вопрос с этим мышлением. – WoJ