简单python IF语句不起作用?

简单python IF语句不起作用?,python,if-statement,python-3.x,Python,If Statement,Python 3.x,在我的代码中,我试图通过使用linecache读取配置文件的某一行和if语句来检查该行是否为真,但由于某种原因,它拒绝工作 为了测试它,我简化了代码 import linecache d = linecache.getline('logconfig.dat', 2) print(d) if d == True: doeslock = True else: doeslock = False print(doeslock) 不管我怎么做,printd都会打印True,prin

在我的代码中,我试图通过使用linecache读取配置文件的某一行和if语句来检查该行是否为真,但由于某种原因,它拒绝工作

为了测试它,我简化了代码

import linecache

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

print(d)
if d == True:
    doeslock = True
else:
    doeslock = False

print(doeslock)
不管我怎么做,printd都会打印True,printdoeslock会打印False。我甚至试着用字母和字符串代替布尔。还是不行。我错过了什么

提前谢谢各位

编辑:

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

编辑2:

好了,伙计们,我发现问题了。结果表明,无论出于何种原因,linecache都返回了我想要的行和上一行。我将配置文件分为两个文件,现在可以正常工作了。不知道是什么导致了这一切,但哦,好吧。谢谢你的帮助

linecache.getline返回字符串,而不是布尔值。所以你必须把d和True进行比较。如果有空格或换行符,您可能还必须去掉getline的结果

>>> if d=="True":
...   print 'ok'
...
ok
linecache.getline返回字符串,而不是布尔值。所以你必须把d和True进行比较。如果有空格或换行符,您可能还必须去掉getline的结果

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

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

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

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

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

从文件中读取一行时,包括换行符在内的整行都是字符串。您应该去掉该字符串,然后与另一个字符串进行比较:

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

从文件中读取一行时,包括换行符在内的整行都是字符串。您应该去掉该字符串,然后与另一个字符串进行比较:

if d.strip('\n') == "True":
如果d.strip=='True',请尝试: 您可能有一个额外的空间或\n

如果d.strip=='True',请尝试: 您可能有一个额外的空间或\n

导入行缓存

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

打印

如果d:

其他:

printdoeslock导入行缓存

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

打印

如果d:

其他:


printdoeslock

正如我在帖子中所说,我想到了这一点,并尝试使用字符串而不是布尔。就像我在帖子里说的,我想到了这一点,试着用字符串代替布尔。它仍然不起作用。printreprd打印什么?你说我甚至尝试过使用字母和字符串,但你没有告诉我们你尝试了什么。因此,它仍然是最有可能的原因。正如@kojiro所说,我们知道“True”==“True”比较将评估为逻辑上的True。所以我们需要你向我们展示你计划的全部内容。有些东西可能会对比较的行为或您可能无意中调用的其他系统功能产生细微的更改。printreprd打印什么?您说我甚至尝试过使用字母和字符串,但您没有向我们展示您尝试过的内容。因此,它仍然是最有可能的原因。正如@kojiro所说,我们知道“True”==“True”比较将评估为逻辑上的True。所以我们需要你向我们展示你计划的全部内容。有些东西可能会对比较的行为或您可能无意中调用的其他系统功能产生细微的更改。这是一个很好的观点,并且可能解释了我尝试使用字符串时出现的混乱。使用d.strip来覆盖一些其他可能的空白更好。@Lawrence或在数据中为True这不是事实。该文件是通过我编写的另一个脚本编写的。写入中不包含“\n”function@ThsiseFaek提供代码,演示如何在不追加换行符的情况下写入文件。请进一步证明,当linecache读取该文件时,结果没有换行符。这是一个很好的观点,可能是我尝试使用字符串混淆的原因。更好的方法是使用d.strip来覆盖一些其他可能的空白。@Lawrence,或者在数据中为True,这不是事实。该文件是通过我编写的另一个脚本编写的。写入中不包含“\n”function@ThsiseFaek提供代码,演示如何在不追加换行符的情况下写入文件。此外,请证明linecache读取该文件时,结果没有换行符。