我的一位同事错误地输入了这个(简化的)代码,并且想知道为什么他的异常没有被捕获:
>>> try:
... raise ValueError
... except IndexError or ValueError:
... print 'Caught!'
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ValueError
现在我知道捕获这两种异常的正确语法应该是except (IndexError, ValueError):
,但为什么上面的语法被认为是有效的?它是如何工作的?
例如,上面的代码会抛出 aValueError
并且不会被捕获。但请使用以下代码:
>>> try:
... raise IndexError
... except IndexError or ValueError:
... print 'Caught!'
...
Caught!
将IndexError
被抓住。评估如何or
,评估到什么?!
感谢您提供的任何光线!