我在一个涉及布尔操作的“if”条件语句中遇到了这个Python场景每当条件中出现索引错误时,Python将其视为False,而不是抛出索引错误这种行为的原因是什么?
示例场景:
lst = [3, 4, 23, 5, 25, 76]
n = len(lst)
if n < 5 and lst[6] > lst[2]:
print True
print False
输出:
False
如您所见,python为什么返回false?,我以为它会抛出索引错误。有人能解释一下幕后发生了什么吗?
最佳答案
在and
语句中使用if
就像在另一个语句中编写两个if
语句:
if n < 5:
if lst[6] > lst[2]:
print True
在这种情况下,很明显,如果
if
不小于5,那么第二个n
不会引发错误:它永远不会执行由于其他人已经描述过短路特性,将它们组合在一个if
中具有完全相同的行为。顺便说一下,写作的“长”方式是这样的:
# if x == 0 or 1/x > 0.01: print True
if x == 0:
print True
elif 1/x > 0.01:
print True
在这里,我们通过仅计算x不为零时的
or
来避免被零除(一个错误)这同样适用于带有1/x
的单-if
版本。因为在这种情况下or
是真的,所以表达式的真值是通过评估该项而知道的,所以不需要评估第二项。