同时处理特定的和一般的Python异常?

2024-06-02 08:02:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想捕捉一个特定的异常并相应地处理它-然后我想继续并执行其他异常必须执行的通用处理。在

来自C背景,我以前可以使用gotos来达到预期的效果。在

这就是我目前正在做的,而且效果很好:

try:
    output_var = some_magical_function()
except IntegrityError as zde:
    integrity_error_handling()
    shared_exception_handling_function(zde) # could be error reporting
except SomeOtherException as soe:
    shared_exception_handling_function(soe) # the same function as above

Tldr:

也就是说,有没有“Python式”的方式来做以下事情:

^{pr2}$

注意:我知道finally子句-这不是用来整理(即关闭文件)的


Tags: outputvarasexceptionfunctionerrorshared背景
2条回答

Exception类将匹配所有异常。。。在

try:
    output_var = some_magical_function()
except IntegrityError as zde:
    integrity_error_handling()
except Exception as ae:
    shared_exception_handling_function(ae) # could be error reporting

但听起来您希望final子句同时为IntegrityError异常以及其他所有异常运行。所以你需要一个不同的结构,可能是这样:

^{pr2}$

内部tryexcept块上的raise命令导致 捕获了要传递给外部块的异常。在

您可以重新生成异常,并在嵌套设置的外部处理程序中处理一般情况:

try:
    try:
        output_var = some_magical_function()
    except IntegrityError as zde:
        integrity_error_handling()
        raise
except ALLExceptions as ae: # all exceptions INCLUDING the IntregityError
    shared_exception_handling_function(ae) # could be error reporting

非限定的raise语句重新引发当前异常,因此IntegrityError异常再次被抛出,由AllExceptions处理程序处理。在

另一种方法是测试异常类型:

^{pr2}$

相关问题 更多 >