2

次の文字列があります

mystr = "foo.tsv"

また

mystr = "foo.csv"

この条件を考えると、上記の 2 つの文字列は常に "OK" と出力されると思います。しかし、なぜ失敗するのでしょうか。

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

それを行う正しい方法は何ですか?

4

1 に答える 1

5

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")):
于 2015-10-07T02:04:56.440 に答える