Условная проверка с помощью str.endswith()

У меня есть следующая строка

mystr = "foo.tsv"

или же

mystr = "foo.csv"

Учитывая это условие, я ожидаю, что две строки выше всегда будут печатать "ОК". Но почему это не удается?

if not mystr.endswith('.tsv') or not mystr.endswith(".csv"):
    print "ERROR"
else:
    print "OK"

Какой правильный способ сделать это?

1 ответ

Решение

Это терпит неудачу, потому что mystr не может закончиться обоими .csv так же как .tsv в то же время.

Таким образом, одно из условий составляет ложное, и когда вы используете not в том, что становится True и, следовательно, вы получите ERROR, Что вы действительно хотите -

if not (mystr.endswith('.tsv') or mystr.endswith(".csv")):

Или вы можете использовать and версия с использованием закона Де-Моргана, который делает not (A or B) в (not A) and (not B)


Также, как отмечено в комментариях к вопросу, str.endswith() принимает набор суффиксов для проверки (так что вам даже не нужно or состояние). Пример -

if not mystr.endswith(('.tsv', ".csv")):
Другие вопросы по тегам