Python 2.7中dict(zip())布尔值判断异常:为何'False'触发if分支?
为什么字符串'False'会触发if分支?
这是个非常容易踩的Python小坑!你代码里的l2列表中,'False'是字符串类型,而不是布尔类型的False。在Python的布尔判定规则里:
- 所有非空字符串,不管内容是
'False'、'0'还是其他看起来像"假值"的内容,都会被判定为True - 只有空字符串
''才会被视为False
看你的代码细节:
l1 = ['alpha','image'] l2 = ['False','False'] d = dict(zip(l1,l2)) if d['image']: print("passing")
这里d['image']的值是字符串'False',它不是空字符串,所以在if判断中会被当作True,自然就进入分支输出"passing"了。
如果要实现你预期的逻辑,有两种常见解决方式:
- 直接使用布尔类型的值:
l1 = ['alpha','image'] l2 = [False, False] # 去掉引号,用原生布尔值 d = dict(zip(l1,l2)) if d['image']: print("passing")
这样运行时就不会进入if分支了。
- 如果只能拿到字符串形式的"False",手动做字符串判断:
if d['image'] != 'False': print("passing")
或者写个通用的字符串转布尔值函数:
def str_to_bool(s): return s.strip().lower() != 'false' if str_to_bool(d['image']): print("passing")
内容的提问来源于stack exchange,提问作者Pinkpretty
相关产品推荐
相关产品推荐

