Как мы можем выйти из сценария с необработанным отслеживанием исключений, проходя через все операторы catch во внешних блоках try-catch, в которые мы вложены?
Предположим, мы определили следующие функции:
import sys
def foo():
try:
bar()
list()[592]
except IndexError:
print('`foo()` be handling error generated by list()[592]')
return
def bar():
try:
list()[345]
except IndexError:
pass
### MAGIC GOES HERE ###
return
Теперь мы делаем вызов: foo ()
Мне бы хотелось, чтобы оператор catch в bar()
убил процесс.
Мы не хотим, чтобы foo()
ловил IndexError
, и определенно не хотим напечатать 'foo()' be handling error generated by list()[592]
.
Если мы заменим ### MAGIC GOES HERE ###
на что-то вроде sys.exit(-20374290374)
,затем мы успешно завершаем процесс, но нет обратной трассировки, и нет никакой информации о «неперехваченном» исключении.
Как мы можем выйти, как если бы исключение было обработано, не пройдя сначала всевнешние пробные блоки?