Вам нужно and
между условиями в скобках.
булева логика сложно, и если часто помогает пройти через примеры. Рассмотрим эту строку:
FAILED blah blah Date: blah
Таким образом, происходит через условия по одному:
- Сбой в линии, так что давайте проверим следующее условие.
- «Результат:» не находится в строке, так что часть истинна.
- У нас есть OR, и у нас уже есть Истинный результат, поэтому нет необходимости даже проверять, находится ли «Дата:» в строке.
- Таким образом, обе стороны И истинны, поэтому все это правда.
Очевидно, что то же самое произойдет, если строка содержит «Результат:», но не «Дата:».
Если бы вы и внутри скобок, то ему необходимо будет проверить, что и «Дата» не в линии и «Результат» не на линии, а не быть счастливым, если либо там не было ,
Другой способ выразить состояние, которое может быть яснее этого:
if "[FAILED]" in line and not (("Result:" in line) or ("Date:" in line)):
Попытка нарисовать таблицу истинности для вашего expression..then вы найдете проблему. –