返回和引发异常之间有什么区别吗?

19
考虑以下代码:
def f(x):
    if x < 10:
        return Exception("error")
    else:
        raise Exception("error2")

if __name__ == "__main__":
    try:
        f(5)                        # f(20)
    except Exception:
        print str(Exception)

有什么区别吗? 什么时候应该使用return Exception,什么时候应该使用raise

5
你知道return是什么吗?我建议参考Python官方教程 - TigerhawkT3
1
这个问题没有展示出对Python(以及编程一般)基本概念的足够研究。我不认为这是对StackOverflow的良好贡献,因此我投票关闭该问题,理由是“过于宽泛”。 - Jules
8
他本可以用更好的方式来表达,但我认为这个根源处的基本问题是一个很好的问题。因此,在我看来,这个问题不应该得到负分。 - Elmex80s
6
这是一个合理的问题——如果你不能问问题,那你该如何学习呢? - jouell
1个回答

33

raisereturn 是两个本质不同的关键字。


raise,在其他语言中通常称为throw,会在当前调用堆栈级别中产生一个错误。您可以通过在try块中覆盖可能引发错误的区域并在except中处理该错误来捕获已触发的错误。

try:
    if something_bad:
        raise generate_exception()
except CertainException, e:
    do_something_to_handle_exception(e)

return则会将一个值返回到函数被调用的位置,因此在这种情况下通常不会寻找返回异常的功能,因为异常本身并不会触发except,而是引发异常的raise才会触发它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接