次の文字列があります
mystr = "foo.tsv"
また
mystr = "foo.csv"
この条件を考えると、上記の 2 つの文字列は常に "OK" と出力されると思います。しかし、なぜ失敗するのでしょうか。
if not mystr.endswith('.tsv') or not mystr.endswith(".csv"):
print "ERROR"
else:
print "OK"
それを行う正しい方法は何ですか?
次の文字列があります
mystr = "foo.tsv"
また
mystr = "foo.csv"
この条件を考えると、上記の 2 つの文字列は常に "OK" と出力されると思います。しかし、なぜ失敗するのでしょうか。
if not mystr.endswith('.tsv') or not mystr.endswith(".csv"):
print "ERROR"
else:
print "OK"
それを行う正しい方法は何ですか?
mystr
両方同時に終了できない.csv
ため、失敗して.tsv
います。
そのため、条件の 1 つが False になり、その中で使用not
すると になりTrue
、したがって が得られERROR
ます。あなたが本当に欲しいものは -
if not (mystr.endswith('.tsv') or mystr.endswith(".csv")):
または、De-Morgan の法則を使用するand
バージョンを使用することもできます。not (A or B)
(not A) and (not B)
また、質問のコメントに記載されているように、str.endswith()
チェックするサフィックスのタプルを受け入れます (したがって、条件は必要ありませんor
)。例 -
if not mystr.endswith(('.tsv', ".csv")):