这是我的计划。
l1 = ['alpha','image']
l2 = ['False','False']
d = dict(zip(l1,l2))
if d['image']:
print("passing")
结果: 通过 这里d ['image']是假的。但它仍然进入if条件。即使值为False,为什么它会进入循环?
答案 0 :(得分:0)
您正在传递string 'False'
而不是布尔对象。
l1 = ['alpha','image']
l2 = [False,False] #--->Boolean
d = dict(zip(l1,l2))
if d['image']:
print("passing")
根据评论进行修改
if d['image'] == "True":
print("passing")
答案 1 :(得分:0)
该值仍为字符串。所以你只是评估字符串是否为空。
如果您确实需要布尔值,请删除引号或检查字符串是否为" True"
'False' == 'True'
答案 2 :(得分:0)
由于您在评论中提到从文件中读取'False'
因此必须是字符串,因此您必须将其与字符串'False'
进行比较。虽然,我建议这个检查案例不敏感。
l1 = ['alpha','image']
l2 = ['False','False']
d = dict(zip(l1,l2))
if d['image'].lower() == 'false':
print("passing")
将字符串转换为布尔等效字符的更通用方法如下:
def string_to_bool(s):
if s.lower() == 'true':
return True
elif s.lower() == 'false':
return False
else:
raise ValueError('string has no boolean conversion')
然后你可以做
if not string_to_bool(d['image']):
print("passing")