Python并不是None

Python and is not None

我在处理这段代码时遇到了一些问题:

1
2
if not fundbenchmark.endswith(("Index","INDEX")) and fundbenchmark is not None:
    fundbenchmark ="%s%s" % (fundbenchmark," Index")

Traceback:

1
AttributeError: 'NoneType' object has no attribute 'endswith'

显然,当fundbenchmarkNone时,就会出现这种错误。暗示and fundbenchmark is not None:有问题

我的假设是正确的还是其他地方可以找到解释?


if中的布尔表达式是从左到右进行短路计算的。您的代码中的错误是,在使用对象之后应用了is not None条件。您需要颠倒条件的顺序。

1
if fundbenchmark is not None and not fundbenchmark.endswith(("Index","INDEX")):


表达式按顺序计算。这意味着在Python有机会检查该值是否为空之前,将首先调用endswith

你应该交换支票的顺序。


你查了一个也没查到。

我不会为none编写显式检查,而是将对象本身用作布尔表达式(请参见为什么在python中是"if not someobj:"Better than"if someobj==none:"?有关详细信息)。

1
2
if fundbenchmark and fundbenchmark.endswith(("Index","INDEX")):
    fundbenchmark ="%s%s" % (fundbenchmark," Index")