13

使用“除了无”有什么意想不到的副作用吗?我期望的行为是该子句不会捕获任何内容,一些小测试似乎证实了这一点。

这是我正在尝试做的事情的大致轮廓。当没有为函数提供参数时,exceptions=None 创建“except None”子句。只是想仔细检查一下我不会捕捉到意外的东西。

# exceptions is exception or set of exceptions I want to do special processing for
def check_exceptions(exceptions=None)
  try:                                                                            
    ...                                                                    
  except exceptions as e:                                                       
    ...                                                                 
4

2 回答 2

13

在这里工作正常(在 Python 2.x 下)。

>>> try:
...   foo
... except None as e:
...   pass
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'foo' is not defined

对于带有表达式的 except 子句,该表达式被求值,如果结果对象与异常“兼容”,则该子句匹配异常。如果对象是异常对象的类或基类,或者是包含与异常兼容的项的元组,则该对象与异常兼容。

来源

因此,表达式不必异常类型,它只会永远匹配失败。

此行为在 Python 3.x 中已更改,并且后面的表达式except必须是BaseException此类的后代或元组。

于 2013-10-11T21:12:12.200 回答
1

蟒蛇 3

def check_exceptions(exceptions=())
  try:                                                                            
    ...                                                                    
  except exceptions as e:                                                       
    ...                              
于 2020-10-31T13:52:28.550 回答