- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最近我遇到了一个我以前从未见过的代码示例:
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/
最近我遇到了一个我以前从未见过的代码示例: try: # a simple bunch of code if sample == 0: return True
我是一名优秀的程序员,十分优秀!