我正在阅读一段时间前写的一些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()
答案 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
在第一种情况下,第二种情况中的例外是NameError
和ZeroDivisionError
。
0
充当占用任何类型的异常的占位符。
>>> try:
... print 'error'
... except:
...
KeyboardInterrupt
>>> try:
... x = 5/0 + 4*a/3
... except:
... print 'error'
...
error
答案 1 :(得分:1)
来自Python docs:
“[...] [except]子句匹配异常,如果结果对象与异常”兼容“。如果对象是异常对象的类或基类,则该异常与异常兼容,或者包含与异常兼容的项目的元组。“
实际上,表达式的类型用于确定except子句是否与异常匹配。由于0
是整数类型,并且该类型的例外将匹配。
由于整数不能被引发为异常,因此这是一个禁用的except
类,它不会捕获任何内容。