使用 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 law 的 and
版本,这使得 not (A or B)
变成 (not A) and (not B)
此外,正如问题中的评论所述,str.endswith()
接受要检查的后缀元组(因此您甚至不需要 or
条件)。示例 -
if not mystr.endswith(('.tsv', ".csv")):
我有以下字符串
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 law 的 and
版本,这使得 not (A or B)
变成 (not A) and (not B)
此外,正如问题中的评论所述,str.endswith()
接受要检查的后缀元组(因此您甚至不需要 or
条件)。示例 -
if not mystr.endswith(('.tsv', ".csv")):