![](/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.