如果第一个是,则将首先评估left子句,然后评估第一个False
。
这就是为什么您可以执行以下操作的原因:
if not person or person.name == 'Bob':
print "You have to select a person and it can't be Bob"
没有破坏。
相反,对于and
子句,只有第一个为True
:时,将评估right子句:
if person and person.name:
# ...
否则,当person
is时将引发异常None
。