2013-09-26 86 views
0

我有以下代碼多個條件不工作

if "[FAILED]" in line and (("Result:" not in line) or ("Date:" not in line)): 
    print line 

我逐行讀取文本文件行。我想在文本文件「[FAILED]」中查找任何地方,但它不能在同一行中顯示「Result:」或「Date:」。

我的代碼當前打印出行,即使它有結果或日期它。

任何幫助,將不勝感激。

感謝。

+1

嘗試畫的真值表你expression..then,你會發現這個問題。 –

回答

1

您在括號需要的狀況之間的and

布爾邏輯是棘手的,如果經常幫助有需要經過例子。考慮這一行:

FAILED blah blah Date: blah 

所以,通過你的條件之一會由一個:

  • 失敗是在該行,所以讓我們查了下情況。
  • 「結果:」不在行中,所以這部分是真的。
  • 我們已經有了一個OR,並且我們已經有了一個True結果,所以沒有必要檢查「Date:」是否在行中。
  • 所以AND的兩邊都是真的,所以整個事情都是真的。

顯然,如果該行包含「Result:」而不是「Date:」,則會發生同樣的情況。

如果你已經和括號裏面,就需要檢查「日期」是不是在行和「結果」不在行,而不是高興,如果要麼都沒有了。

一種不同的方式來表達,這可能是更清晰的狀況是這樣的:

if "[FAILED]" in line and not (("Result:" in line) or ("Date:" in line)): 
+0

我剛剛意識到這一點......)愚蠢的錯誤。感謝所有的幫助。我會將你的回答標記爲答案。 – Jeremy