我的一位同事错误地输入了这个(简化的)代码,并想知道为什么他的例外没有被抓住:
>>> try:
... raise ValueError
... except IndexError or ValueError:
... print 'Caught!'
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ValueError
Run Code Online (Sandbox Code Playgroud)
现在我知道捕获两种类型的异常的正确语法应该是except (IndexError, ValueError):,但为什么以上认为是有效的语法?它是如何工作的?
例如,上面的代码将抛出一个ValueError,它不会被捕获.但是拿这个代码:
>>> try:
... raise IndexError
... except IndexError or ValueError:
... print 'Caught!'
...
Caught!
Run Code Online (Sandbox Code Playgroud)
在IndexError将陷入.如何or评估,评估的内容是什么?!
感谢您可以放下任何光线!
Roh*_*ain 12
那是因为IndexError or ValueError被评估为IndexError.
>>> IndexError or ValueError
<type 'exceptions.IndexError'>
Run Code Online (Sandbox Code Playgroud)
的or运算符返回计算结果为第一个表达式True(在这种情况下IndexError),或最后一个表达式,若没有一个是True.
所以,你的except语句实际上相当于:
except IndexError:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |