![](/img/trans.png)
[英]Python | simple if/else statement inside for loop - not working
[英]Simple python IF statement not working?
在我的代码中,我试图通过使用linecache读取该行以及一个if语句来检查配置文件的特定行,以查看它是否为True,但是由于某种原因它拒绝工作。
我简化了代码以对其进行测试。
import linecache
d = linecache.getline('logconfig.dat', 2)
print(d)
if d == True:
doeslock = True
else:
doeslock = False
print(doeslock)
不管我尝试什么, print(d)
都将输出True
,而print(doeslock)
将输出False
。 我什至尝试使用字母和字符串代替布尔符号。 仍然没有工作。 我在这里想念什么?
在此先感谢大家
编辑:
当我使用字符串进行比较时,我用y替换了文件中的True
,并修改了if语句以查看d
变量是否为“ y”
编辑2:
好的,我发现了问题。 事实证明,无论出于何种原因,linecache都返回了我想要的行和上一行。 我将配置分为两个文件,现在工作正常。 不知道是什么原因导致了这种情况的发生,但是很好。 谢谢您的帮助!
当您从文件中读取一行时,您会获得包括换行符在内的整行作为字符串。 您应该将其剥离,然后与另一个字符串进行比较:
if d.strip('\n') == "True":
该字符串与布尔值不同。 考虑:
>>> d = 'True'
>>> print(d)
True
>>> if d == True:
... doeslock = True
... else:
... doeslock = False
...
>>> print(doeslock)
False
>>> bool('False')
True
您可能想要的是:
import linecache
d = (linecache.getline('logconfig.dat', 2)).strip()
print(d)
doeslock = (d == 'True')
print(doeslock)
还请考虑以下事项:
>>> with open('randfile', 'w') as whatever:
... whatever.write('y')
...
>>> import linecache
>>> d = linecache.getline('randfile', 1)
>>> print(d)
y
>>> d == 'y'
False
>>> 'y' in d
True
>>> d.strip() == 'y'
True
linecache.getline
返回一个字符串,而不是布尔值。 因此,您必须将d
与"True"
进行比较。 如果有空格或换行符,您可能还必须剥离getline的结果。
>>> if d=="True":
... print 'ok'
...
ok
尝试d.strip()=='True':可能是您有多余的空间或\\ n。
导入线缓存
d = linecache.getline('logconfig.dat',2)
打印(d)
如果d:
doeslock = True
其他:
doeslock = False
打印(锁)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.