gpt4 book ai didi

python - `try ... except not` 施工

转载 作者:太空狗 更新时间:2023-10-29 21:27:43 25 4
gpt4 key购买 nike

最近我遇到了一个我以前从未见过的代码示例:

try:
# a simple bunch of code
if sample == 0:
return True
else:
raise ExampleError()
except not ExampleError:
raise AnotherExampleError()

它是如何工作的(如果它能工作的话)?

最佳答案

编辑:下面的答案是针对 Python 3 的,我没有意识到与 Python 2.7 相关的问题。在 Python 2 中,看起来,如果 except 之后的表达式没有导致 BaseException 的子类型,解释器不会提示。但是,该行为仍然是错误的,它会在所有情况下忽略 except block 。


这是一个有趣的结构,它在语法上是有效的,但在语义上是错误的。我想代码的作者是想表达类似“为除 ExampleError 之外的任何异常类型运行此 except block ”之类的意思。然而,真正发生的事情更像是:

try:
# ...
except (not bool(ExampleError)):
# ...

当在 try block 中引发异常时,Python 会遍历不同的 except block 以寻找与异常类型匹配的 block 。当它看到 except not ExampleError 时,等同于 except (not bool(ExampleError)),它会导致 except False,这是无效的,因为 False 不是 BaseException 的子类型(或 BaseException 的子类型的元组)。因此,如果没有引发异常但错误,代码甚至可以运行。

关于python - `try ... except not` 施工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56078086/

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