当我评估以下表达式时:
1或(1/0)和1
遵循什么规则(优先权,短路评估等)来获得答案
答案 0 :(得分:2)
b or anything_else
被定义为返回b,而不评估anything_else。由于您的第一个是真实的,因此您的1/0永远不会被评估,因此没有错误。 “true-ish”是指Python认为是真的任何值,而不仅仅是True
布尔值。尝试使用True或[2]代替前1来表达我的意思。
答案 1 :(得分:1)
Python短路评估。在您的示例中,表达式
1 or (1/0) and 1
在第一个1
完成评估并返回True
。
一个更简单的例子用于说明Python的短路评估。考虑表达式:
(1/0) or 1
这会在评估ZeroDivisionError
时引发(1/0)
例外。但表达式是:
1 or (1/0)
短路评估为True
。由于子表达式(1/0)
永远不会被评估,因此不会引发异常。