Python布尔变量,True,False和None

Python boolean variable, True, False and None

本问题已经有最佳答案,请猛点这里访问。

我有一个名为mapped_filter的布尔变量。如果我没有错,这个变量可以有3个值,要么是True,要么是FalseNone

我想区分if语句中的3个可能值。有没有更好的方法可以做到这一点?

1
2
3
4
5
6
if mapped_filter:
    print("True")
elif mapped_filter == False:
    print("False")
else:
    print("None")


在您的代码中,任何不真实的东西或False打印"None",即使它是其他东西。因此,[]将打印None。如果除了TrueFalseNone之外没有其他对象可以到达,那么您的代码就可以了。

但在Python中,我们通常允许任何对象是真实的或不真实的。如果你想这样做,最好的方法是:

1
2
3
4
5
6
if mapped_filter is None:
    # None stuff
elif mapped_filter:
    # truthy stuff
else:
    # falsey stuff

如果您明确希望不允许任何不是boolNone的值,则应执行以下操作:

1
2
3
4
5
6
7
8
9
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__}')