2011-12-19 9 views
2

私のコードの一部は、2つの項目の比較に依存しており、存在しない変数と比較して終了する可能性があります。そういうわけで、フィラーの変数値をセットに入れて、それらが両方とも定義され、比較できることを確認します。Pythonで決してマッチしない変数をどのように定義できますか?

しかし、フィラー値を追加すると、他の値とのマッチングはできません。私はNoneを使うだろうが、他の値もNoneである可能性がある。私は、フィラーの値が何にもマッチしないことを確認する良い方法があるのでしょうか?すでに定義されている値は何でもかまいません(ユーザー定義のものです)。

また、この問題を解決する他の方法の提案もあります。私は、「デフォルト値」を意味する代わりNoneEllipsisの使用を見ましたかそこら

+0

あなたのコードを共有してもよろしいですか?そのような珍しい解決法が必要なことを私が興味を持っているのです。 –

答えて

3

あなたが比較するカスタムクラスを定義できるようです。それは勝った後、

missing = object() 

との比較でmissingを使用(たとえば:someValueのはどのように単純程度NOVALUE

+2

'is'演算子をうまく使い、不要なインスタンスを作るのを避けてください。' None'と同じように単純な 'NoValue'を使いましょう。 – redShadow

+0

@redShadow良い点、私は答えを更新します – obmarg

+3

その点に関しては、単に 'NoValue = object()'を使うことができます。 – delnan

1

何回..

とにかく、私は完全にあなたの質問を理解してわからない:

種類
  • オブジェクトの比較ですか? dict s?
  • コードを投稿できますか?私は、 "定義されて比較できるかどうかを確認するためにデフォルト値を設定する"というポイントを見ません。 KeyError例外をキャッチしないでください。.get() ..を使用してください。
+0

私はそれをすることができましたが、私が必要とするすべてが否定的な比較だったときには不必要に思えました。また、私は文字列を比較しています。 –

+0

私はそれが "不必要"であることはわかりません。勿論、 'Ellipsis'を使うか、自分のクラスを定義して欠損値を使うことができますが、例外を捕捉するのが最善の方法です。繰り返しますが、どのような種類のオブジェクトで比較していますか?彼らは文字列のdictsですか? – redShadow

8

のインスタンスではありませんよう

class NoValue: 
    pass 

if someValue is NoValue: 
    doSomething() 

は、比較は常に、失敗する必要がありますNoneを含む他のオブジェクトと等しいと比較されません)。

関連する問題