我正在读一本True - False
文件中的值,我需要将其转换为布尔值。目前它总是将其转换为True
即使该值设置为False
.
这是一个MWE
我正在尝试做的事情:
with open('file.dat', mode="r") as f:
for line in f:
reader = line.split()
# Convert to boolean <-- Not working?
flag = bool(reader[0])
if flag:
print 'flag == True'
else:
print 'flag == False'
The file.dat
文件基本上由一个带有值的字符串组成True
or False
写在里面。这种安排看起来非常复杂,因为这是一个来自更大代码的最小示例,这就是我将参数读入其中的方式。
Why is flag
总是转换为True
?
bool('True')
and bool('False')
总是回来True
因为字符串“True”和“False”不为空。
引用一位伟人的话(还有Python文档 http://docs.python.org/2/library/stdtypes.html#truth-value-testing):
5.1.真值测试 https://docs.python.org/2/library/stdtypes.html#truth-value-testing
任何对象都可以测试真值,用于 if 或 while
条件或作为下面布尔运算的操作数。这
以下值被视为 false:
- …
- 任何数字类型的零,例如,
0
, 0L
, 0.0
, 0j
.
- 任何空序列,例如
''
, ()
, []
.
- …
所有其他值都被视为 true — 因此多种类型的对象
总是正确的。
内置的bool http://docs.python.org/2/library/functions.html#bool函数使用标准的真实性测试程序。这就是为什么你总是得到True
.
要将字符串转换为布尔值,您需要执行以下操作:
def str_to_bool(s):
if s == 'True':
return True
elif s == 'False':
return False
else:
raise ValueError # evil ValueError that doesn't tell you what the wrong value was
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)