7

我正在阅读不久前编写的一些 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()
4

2 回答 2

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

在第一种情况下,例外是NameErrorZeroDivisionError在第二种情况下。0充当被捕获的任何类型异常的占位符。

>>> try:
...   print 'error'
... except:
... 
KeyboardInterrupt
>>> try:
...   x = 5/0 + 4*a/3
... except:
...   print 'error'
... 
error
于 2013-04-05T14:12:00.593 回答
1

来自Python 文档

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

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

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

于 2013-04-05T14:16:26.900 回答