首页 > 解决方案 > 如何在函数执行完成后引发异常并捕获它?

问题描述

我的代码中有一行可能引发异常,我想处理这个执行并继续执行。

def foo():
    #good code
    if thingThatHappensSometimes:
        raise CustomException
    #code i want to execute
    return resultIwant

def bar():
    resultIwant = None
    try:
        #good code
        resultIwant = foo()
    except CustomException:
        #code that should run if an exception was raised
    finally:
        print(resultIwant)
        print('All done!')

我的问题是在某些情况下 foo 会引发异常,但代码逻辑中没有任何内容阻止它为 resultIwant 生成结果。目前,如果我在 bar 中处理异常,我将不会到达 foo 的执行结束,但如果我在 foo 中处理异常,则异常将已经被处理,并且我不会到达 bar 中的 except 块。有没有办法解决这个问题?

标签: python-3.xexception

解决方案


引发异常此时会停止执行,因此您不能既引发异常又返回值。但是你可以返回一个(value, exception_or_none)元组:

def foo():
    error = None    
    #good code
    if thingThatHappensSometimes:
        error = CustomException()
    #code i want to execute
    return resultIwant, error

def bar():
    #good code
    resultIwant, error = foo()
    if error: 
        #code that should run if an exception was raised
    print(resultIwant)
    print('All done!')

推荐阅读