簡體   English   中英

簡單的python IF語句不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM