使用 str.endswith() 进行条件检查

Conditional check with str.endswith()

我有以下字符串

mystr = "foo.tsv"

mystr = "foo.csv"

鉴于这种情况,我希望上面的两个字符串始终打印 "OK"。 但是为什么会失败呢?

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

正确的做法是什么?

它失败了,因为 mystr 不能同时以 .csv.tsv 结尾。

所以其中一个条件等于 False,当您使用 not 时,它变为 True,因此您得到 ERROR。你真正想要的是 -

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

或者你可以使用 De-Morgan's lawand 版本,这使得 not (A or B) 变成 (not A) and (not B)


此外,正如问题中的评论所述,str.endswith() 接受要检查的后缀元组(因此您甚至不需要 or 条件)。示例 -

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