Почему not in не работает в моем коде? Я пытался разбивать конструкция на два not in для '@' и для '.' , но условие не проходит. Что нужно сделать?

string = 'Ван dsytz@ru 62'

split_string = string.split(' ')

if '@' and '.' not in list(split_string[1]):
    raise NotEmailError('Некорректный email')

string = 'Ван dsytz@ru 62'

split_string = string.split(' ')

if '@' not in list(split_string[1]) and '.' not in list(split_string[1]):
    raise NotEmailError('Некорректный email')

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

Автор решения: gil9red

Попробуйте так:

if '@' not in split_string[1] or '.' not in split_string[1]:
    raise NotEmailError('Некорректный email')

Условие '@' and '.' not in list(split_string[1]) это проверка:

  • '@' - проверка строки '@' - это всегда будет True, т.к. булевое True для строки - что она не пустая
  • '.' not in list(split_string[1]) - а тут уже зависит от значения в split_string[1]

Поэтому, нужно явно писать '@' not in split_string[1], чтобы проверить наличие '@'. А приведение к списку в list(split_string[1]) лишнее - оператор in есть и у строк

→ Ссылка