Условная проверка с помощью 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")):