免责声明:这看起来像是重复的,但找到这个特定问题的答案并非易事 - 我希望其他人能够更轻松地找到这个问题/答案!
当我运行以下代码时,它无法捕获第二个IndexError,而是提升它:
try:
raise ValueError
except ValueError,IndexError:
pass
l = [1,2,3]
try:
l[4]
except IndexError:
print "an index error!"
结果
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-24-61bcf6d2b9af> in <module>()
6 pass
7 try:
----> 8 l[4]
9 except IndexError:
10 print "an index error!"
IndexError: list index out of range
答案 0 :(得分:19)
问题是使用except ...
语法很糟糕。这一行:
except ValueError,IndexError:
应该是
except (ValueError,IndexError):
解释:如果要检查抛出的异常,则语法为except <exception-class>,e
,其中变量e
被分配了<exception-class>
的实例。以下是失败代码中发生的情况:
open("afile",'x')
会抛出ValueError
,因为'x'
不是有效的文件模式字符串。except ValueError,IndexError
将抛出的ValueError
实例分配给名为IndexError
的新变量。IndexError
类。 l[4]
引发了实际的IndexError
例外。except
子句是否存在此异常类型,但只找到ValueError
的实例(恰好具有名称IndexError
),因此不会捕获异常。 如果您正在运行交互式python会话,则可以del IndexError
发现内置内容并允许您再次捕获IndexError
。