gpt4 book ai didi

python - "raise"在 "try"或 "except" block 之外的 python 函数的末尾

转载 作者:太空狗 更新时间:2023-10-30 01:54:24 25 4
gpt4 key购买 nike

如果 raise 不在 tryexcept 子句中,而只是作为函数中的最后一条语句,它会做什么?

def foo(self):
try:
# some code that raises an exception
except Exception as e:
pass

# notice that the "raise" is outside
raise

此示例打印 1 而不是 2,因此最后一个 raise 语句肯定只是引发了最后一个抛出的异常。

def foo():
try:
raise Exception()
except Exception as e:
pass

print 1
raise
print 2

if __name__ == '__main__':
foo()

是否有关于这种使用模式的官方文档?

最佳答案

作为Russell说,

A bare raise statement re-raises the last caught exception.

这是否发生在 try-except block 中并不重要。如果已捕获异常,则调用 raise 将重新引发该异常。否则,Python 会提示先前捕获的异常是 None 并引发 TypeError 因为 None 实际上不是可以引发的。

作为tdelaney说,除了在错误处理函数中,这样做似乎没有意义。我个人认为它甚至不属于错误处理函数,因为 raise 仍应位于 except 子句中。无论是否发生错误,有人都可以使用它来尝试执行代码,但是 finally 子句是执行此操作的正确方法。另一种可能性是使用它作为确定在执行函数时是否发生错误的方法,但是有更好的方法来做到这一点(例如返回一个额外的值来指示是否/在哪里发生错误)。

关于python - "raise"在 "try"或 "except" block 之外的 python 函数的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25632147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com