我们如何执行未处理的异常类型退出"early"?



我们如何通过未经处理的异常回溯退出脚本,遍历我们嵌套在其中的外部 try-catch 块中的每个 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

现在,我们打个电话: 福((

我想要的是,让bar()中的捕获语句杀死这个过程。

我们不希望foo()赶上IndexError,绝对不想打印'foo()' be handling error generated by list()[592]

如果我们用类似的东西替换### MAGIC GOES HERE ###sys.exit(-20374290374),那么我们成功地杀死了进程,但没有回溯,也没有关于"未捕获"异常的信息。

我们如何才能像处理异常一样退出,而不首先通过所有外部尝试捕获块?

你提出了一些没有被捕获的东西:

import sys
class MyException(Exception):
pass
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: 
raise MyException("step out")
return

foo()

输出:

Traceback (most recent call last):
File "main.py", line 26, in <module>
foo()
File "main.py", line 10, in foo
bar()
File "main.py", line 21, in bar
raise MyException("step out")
__main__.MyException: step out

如果你在某个地方抓住了基本Exception(-你不应该-(,你需要检查你的特殊类型并重新抚养它:

except Exception as e:
if isinstance(e,MyException):
raise # e not needed, raise rethrows last one
print('`foo()` be handling error generated by list()[592]')

相关内容

  • 没有找到相关文章

最新更新