python尝试除了0

时间:2013-04-05 14:02:12

标签: python

我正在阅读一段时间前写的一些python代码,并发现了这个:

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 :(得分: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

在第一种情况下,第二种情况中的例外是NameErrorZeroDivisionError0充当占用任何类型的异常的占位符。

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

答案 1 :(得分:1)

来自Python docs

“[...] [except]子句匹配异常,如果结果对象与异常”兼容“。如果对象是异常对象的类或基类,则该异常与异常兼容,或者包含与异常兼容的项目的元组。“

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

由于整数不能被引发为异常,因此这是一个禁用的except类,它不会捕获任何内容。