Python布尔变量,True,False和None

时间:2018-03-12 12:47:59

标签: python

我有一个名为mapped_filter的布尔变量。 如果我没有错,则此变量可以包含3个值,TrueFalseNone

我想区分if语句中的3个可能值中的每一个。有没有比实现以下更好的方法来实现这一目标?

if mapped_filter:
    print("True")
elif mapped_filter == False:
    print("False")
else:
    print("None")

1 个答案:

答案 0 :(得分:4)

在您的代码中,任何不真实或False打印"None"的内容,即使它是其他内容。因此[]会打印None。如果TrueFalseNone以外的任何对象都无法访问,那么您的代码就可以了。

但是在python中我们通常允许任何对象变得不真实。如果你想这样做,可以采取更好的方法:

if mapped_filter is None:
    # None stuff
elif mapped_filter:
    # truthy stuff
else:
    # falsey stuff

如果您明确要禁止任何非boolNone的值,请执行以下操作:

if isinstance(mapped_filter, bool):
    if mapped_filter:
        # true stuff
    else:
        # false stuff
elif mapped_filter is None:
    # None stuff
else:
    raise TypeError(f'mapped_filter should be None or a bool, not {mapped_filter.__class__.__name__}')