Помогите понять работу 'or' в данном контексте (python)

Есть цель - проверить email адреса на наличие символов (провалидировать) Пишу простой цикл с таким условием:

for _str in f.readlines():
    if ',' or '('  in _str.strip():
        foo()
    else:
        bar()

При применении данного условия функцией foo начинают обрабатываться не только строки, где действительно встречаются данные символы, а все строки подряд. Если я убираю or - всё обрабатывается правильно. С чем это связано.

Также просьба подсказать способ для обработки сразу на множество условий, типа:

if foo([',','/'], or)  in _str.strip():

Можно ли применить что-то в таком духе? (Код абсолютно выдуман, но суть примерно должен передавать)

Знаю, что есть регулярки, но несколько регулярок отработали на данном массиве плохо и мне быстрее валидировать через условия


Ответы (3 шт):

Автор решения: Эникейщик

Проверка в (почти) одну строчку без циклов

symbols = [",","("] # список с проверяемыми символами
if any(s in _str for s in symbols): # проверка
    # do your stuff
→ Ссылка
Автор решения: CrazyElf

До кучи ещё такой вариант предложу:

if any(map(_str.strip().__contains__, (',', '('))):

Просто проверяем, входит ли хоть одна строка (символ в данном случае) из кортежа в проверяемую строку.

→ Ссылка
Автор решения: Xander

Дело в том, что хотя синтаксис питона во многом похож на простой английский язык, вы не можете просто написать так, как если бы вы писали это на человеческом английском.

or (так же как и and) - это не просто слова, а логические операторы, которые работают по определённым правилам. Чтобы получить то, что вы хотите, вам надо писать так:

if ',' in _str.strip() or '('  in _str.strip():
→ Ссылка