我有以下字符串
mystr = "foo.tsv"
或
mystr = "foo.csv"
鉴于这种情况,我希望上面的两个字符串始终打印“OK”。 但为什么它会失败?
if not mystr.endswith('.tsv') or not mystr.endswith(".csv"):
print "ERROR"
else:
print "OK"
这样做的正确方法是什么?
答案 0 :(得分:5)
失败是因为mystr
无法同时以.csv
和.tsv
结尾。
因此,其中一个条件为False,当您使用not
时,它变为True
,因此您获得ERROR
。你真正想要的是 -
if not (mystr.endswith('.tsv') or mystr.endswith(".csv")):
或者您可以使用De-Morgan's law使用and
版本,这会使not (A or B)
成为(not A) and (not B)
此外,正如问题中的评论中所述,str.endswith()
接受要检查的后缀元组(因此您甚至不需要or
条件)。示例 -
if not mystr.endswith(('.tsv', ".csv")):