简单的python IF语句不起作用?

时间:2014-12-19 15:51:11

标签: python if-statement python-3.x

在我的代码中,我试图通过使用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)都会打印Trueprint(doeslock)会打印False。我甚至尝试使用字母和字符串而不是bools。仍然没有工作。我在这里缺少什么?

先谢谢你们

编辑:

当我使用字符串进行比较时,我用y替换了文件中的True并修改了if语句以查看d变量是否为'y'

编辑2:

好的,我发现了这个问题。无论出于何种原因,都会将linecache返回到我想要的行和前一行。我将配置分成两个文件,现在它工作正常。不知道是什么导致了这种情况发生但是哦。谢谢你的帮助!

5 个答案:

答案 0 :(得分:3)

当您从文件中读取一行时,您将整个行(包括换行符)作为字符串。您应该将其删除,然后与另一个字符串进行比较:

if d.strip('\n') == "True":

答案 1 :(得分:1)

该字符串与布尔值不同。考虑:

>>> 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

答案 2 :(得分:0)

linecache.getline返回一个字符串,而不是布尔值。因此,您必须将d"True"进行比较。如果有空格或换行符,您也可能需要去除getline的结果。

>>> if d=="True":
...   print 'ok'
...
ok

答案 3 :(得分:0)

尝试d.strip()==' True': 可能你有一个额外的空间或\ n。

答案 4 :(得分:0)

导入linecache

d = linecache.getline('logconfig.dat',2)

打印(d)

如果d:

doeslock = True

否则:

doeslock = False

打印(doeslock)