python - finally block 可以知道是否有异常吗

标签 python exception try-finally

在 Python 程序中,我的代码结构如下:

try:
    value = my_function(*args)
finally:
    with some_context_manager:
        do_something()
        if 'value' in locals():
            do_something_else(value)

但是 locals() 中的 'value' 构造感觉有点脆弱,我想知道是否有更好的方法来做到这一点。

我真正想要的是 finally 中的代码根据 try block 是否引发异常而表现得略有不同。有没有办法知道是否引发了异常?

最佳答案

如果目标是“当出现异常时,做一些不同的事情”,怎么样:

exception_raised = False
try:
    value = my_function(*args)
except:
    exception_raised = True
    raise
finally:
    with some_context_manager:
        do_something()
        if not exception_raised:
            do_something_else(value)

现在,如果您要处理多个异常,我建议:

completed_successfully = False
try:
    value = my_function(*args)
else:
    completed_successfully = True
finally:
    with some_context_manager:
        do_something()
        if completed_sucessfully:
            do_something_else(value)

关于python - finally block 可以知道是否有异常吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43308702/

相关文章:

python - `Exception.__str__()`在Python中的实现

exception - Ada 83 异常是否包括资源清理?

java - Java中错误和异常的区别?

java - 为什么finally block 中的变量需要是静态的

java - 尝试内和尝试后返回位置时的不同行为

python - op_kwargs 中带有 execution_date 的 Airflow Python 脚本

python - 在 matplotlib(或 seaborn)中为 x 值着色并显示在图例中,而不是显示为刻度

Python 记录到 StringIO 处理程序

python - Django查询还从ForeignKey表返回数据

c# - 捕获所有异常并...什么都不做?