我有一个名为mapped_filter
的布尔变量。
如果我没有错,则此变量可以包含3个值,True
,False
或None
。
我想区分if
语句中的3个可能值中的每一个。有没有比实现以下更好的方法来实现这一目标?
if mapped_filter:
print("True")
elif mapped_filter == False:
print("False")
else:
print("None")
答案 0 :(得分:4)
在您的代码中,任何不真实或False
打印"None"
的内容,即使它是其他内容。因此[]
会打印None
。如果True
,False
和None
以外的任何对象都无法访问,那么您的代码就可以了。
但是在python中我们通常允许任何对象变得不真实。如果你想这样做,可以采取更好的方法:
if mapped_filter is None:
# None stuff
elif mapped_filter:
# truthy stuff
else:
# falsey stuff
如果您明确要禁止任何非bool
或None
的值,请执行以下操作:
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__}')