免责声明:这看起来像是重复的,但找到这个特定问题的答案不仅仅是微不足道的 - 我希望其他人能更轻松地找到这个问题/答案!
当我运行以下代码时,它无法捕获第二个 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
问题是使用不当except ...
句法。该行:
except ValueError,IndexError:
应该
except (ValueError,IndexError):
解释:如果你想检查抛出的异常,语法是except <exception-class>,e
其中变量e
被分配了一个实例<exception-class>
。以下是失败代码中发生的情况:
-
open("afile",'x')
抛出一个ValueError
as 'x'
不是有效的文件模式字符串。
-
except ValueError,IndexError
分配抛出的ValueError
实例到一个名为的新变量IndexError
.
- 这个新变量会覆盖内置变量
IndexError
class.
-
l[4]
提出一个实际的IndexError
例外。
- The
except
检查此异常类型的子句,但仅检查其实例ValueError
(碰巧有这个名字IndexError
) 被发现,所以异常没有被捕获。
如果您正在运行交互式 python 会话,您可以del IndexError
揭开内置并让你抓住IndexError
又来了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)