Python中AND条件哪侧先求值?是否支持短路求值避免异常?
Python中AND逻辑的短路求值行为
是的,Python会直接跳过右侧条件的检查,完全不用担心foo为None时调用方法引发异常。
这是Python的短路求值特性:对于and运算符,程序会先计算左侧表达式的结果。如果左侧返回False,整个and表达式的结果已经确定是False了,所以根本不会再去执行右侧的表达式。
拿你给出的代码举例:
if foo is not None and foo.passes_the_test(): # do something
当foo是None时,foo is not None的结果是False,此时foo.passes_the_test()这部分代码完全不会被执行,也就不会触发AttributeError(None没有passes_the_test方法)的异常。这种写法正是利用短路求值来避免空对象调用方法的错误,在Python里非常常用。
内容的提问来源于stack exchange,提问作者Viljami
相关产品推荐
相关产品推荐

