документация для оператора raise без аргументов говорит
Если никаких выражений нет, рейз повторно вызывает последнее исключение, которое было активным в текущей области.
Я думал, что это означает, что текущая функция должна была выполнять предложение except
. Прочитав этот вопрос и немного экспериментируя, я думаю, это означает, что любая функция в стеке должна выполнять предложение except
, но я не уверен. Кроме того, я понял, что понятия не имею, как работает трассировка стека с повышением no-arg:
def f():
try:
raise Exception
except:
g()
def g():
raise
f()
производит
Traceback (most recent call last):
File "foo", line 10, in <module>
f()
File "foo", line 5, in f
g()
File "foo", line 3, in f
raise Exception
Exception
Это не похоже на стек во время начального рейза, или на стек во время повторного рейза, или на конкатенацию обоих стеков или что-то, что я могу понять.
Как я могу сказать, что нет-arg-рейза, ищущего любую функцию в стеке, выполняющую предложение except
? Кроме того, как работает трассировка стека на ререйзе?