2013-04-05 90 views
7

我读写前一阵子一些Python代码,并发现这一点:蟒蛇尝试除0

try: 
    # do some stuff 
except 0: 
    # exception handling stuff 

而且我不知道是哪除了0手段?我有我的猜测:假设没有捕获任何东西,即让异常传播,或者它可能是某种开关打开和关闭调试模式,通过删除0然后捕获所有内容。

任何人都可以借鉴一些见解吗?谷歌搜索什么都没有产生...

谢谢!

一些示例代码(按要求):

  try: 
       if logErrors: 
        dbStuffer.setStatusToError(prop_id, obj) 
        db.commit() 
      except 0: 
       traceback.print_exc() 
+2

你确定它没有被写入,除了:0吗? (注意冒号的位置) – NPE 2013-04-05 14:03:44

+0

NPE我是积极的,我现在正在查看差异。但我会假设除了:0将相当于除了:pass? – mlnyc 2013-04-05 14:07:20

+0

运行它时是否出现错误? – 2013-04-05 14:08:49

回答

2

从我个人理解,这是一个用于调试目的非常有用的(捕获异常的类型)

在您的例子0用作占位符,确定异常的类型。

>>> try: 
... x = 5/1 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'a' is not defined 
>>> try: 
... x = 5/0 + 4*a/3 
... except 0: 
... print 'error' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
ZeroDivisionError: integer division or modulo by zero 

在第一种情况中,例外的是NameError并且在第二ZeroDivisionError0充当任何类型的捕获异常的占位符。

>>> try: 
... print 'error' 
... except: 
... 
KeyboardInterrupt 
>>> try: 
... x = 5/0 + 4*a/3 
... except: 
... print 'error' 
... 
error 
+1

这与没有'try'-'except'声明完全相同。 “0:除外”实际上并没有做任何事情。 – omz 2013-04-05 14:14:56

+0

在except块中的'raise'以重新引发异常会做同样的事情would not it – 2013-04-05 14:15:06

+0

它正在节省您重新格式化一个(可能长的)代码块来做到这一点,然而(因此调试参考我猜)。 – FatalError 2013-04-05 14:15:48

1

Python docs

“[...]的[除]子句与异常匹配,如果生成的对象是‘相容的’,不同之处一个目的是用一个异常,如果它兼容。是异常对象的类或基类,或者包含与异常兼容的项的元组。

实际上,表达式的类型用于确定except子句是否匹配异常。由于0是整数类型,并且该类型的例外将匹配。

由于不能将整数提升为例外,因此这是禁用的except类,它不会捕获任何内容。

+1

你不能在Python中引发整数异常。 TypeError:2.7.3上的异常必须是旧式类或派生自BaseException,而不是int' – 2013-04-05 14:19:03

+0

@AhmedAeonAxan你是对的。我只是试了一下。答案已被编辑。 – Ber 2013-04-05 14:22:57

+0

我认为在某个时刻(在遥远的过去),你可能会'提高int,0',我认为这会触发except子句中的代码。现在该语句在** runtime **引发了一个异常,但不是** parse-time **,所以代码可能从未更新过。 [reference1](http://docs.python.org/release/2.3/ref/raise.html)[reference2](http://docs.python.org/release/2.3/ref/try.html) – mgilson 2013-04-05 14:23:23