检查None或者有类似的错误捕获是很常见的。有时您还需要另一个依赖于x的语句:
if x == None:
if x[0]>0:
... # some code
你能安全地组合这样的if语句(代码简洁)吗?
if x != None and x[0]>0:
... # some code
或者解释员是否不保证评估顺序并在第一个错误后停止?
答案 0 :(得分:3)
是的,这是安全的,因为运营商and
and or
short-circuits。
注意:强>
如果您想检查对象是否为is
,建议使用None
:
if x is not None and x[0] > 0:
# ...
答案 1 :(得分:0)
是的,因为Python并且被短路(wikipedia)并从左到右进行评估。
这意味着如果x == None
,它将不会评估其余部分:Python已经知道完整and
的评估将是False
,因为:
False and True and True and True
仍为False
请考虑以下事项:
x = None
if x is not None and a != "test":
print "Point 1"
else:
print "Point 2"
变量a
未在任何地方初始化,对吧?如果Python遇到这一点,你会得到一个Name Error
异常,但你得到的是:
Point 2
意味着Python甚至不打算评估a != "test"
部分。
or
发生了类似的事情。如果任何条件为True
,则Python停止评估:
以下代码:
x = None
if x is None or a != "test":
print "Point 1"
else:
print "Point 2"
不会抛出异常,但输出
Point 1
奖金:
当检查变量是否为None时,建议使用is
(或is not
)而不是==
或!=
(如SO问题中所述){ {3}})