Python除了None

时间:2013-10-11 21:10:24

标签: python

使用“除无”之外是否有任何意外的副作用?我期望的行为是,一些小的测试似乎证实了该条款没有任何内容。

以下是我想要做的大致概述。如果没有为函数提供参数,则exceptions = None,这将创建“除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:                                                       
    ...                                                                 

2 个答案:

答案 0 :(得分:8)

在这里工作正常(在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子句,将计算该表达式,如果结果对象与异常“兼容”,则子句匹配异常。如果对象是异常对象的类或基类,或者包含与异常兼容的项的元组,则该对象与异常兼容。

source

因此,表达式不会作为异常类型,它将无法匹配。

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

答案 1 :(得分:0)

Python 3

def check_exceptions(exceptions=())
  try:                                                                            
    ...                                                                    
  except exceptions as e:                                                       
    ...