2011-12-15 14 views
6

私はデータベースに接続する既存のアプリケーションを持っています。 Python 2.7で動作しています。なし対Pythonの空の文字列

アプリケーションは、値を持たない変数を設定するためにNoneと ""を使用する方法が矛盾しています。私はこれを一貫させて、コードを一方向に更新しようとします。私はヌルと同じようなしを考えると、それは空の変数のための正しい選択であると仮定しますが、アプリケーションは、このよう

if variable.upper() == "X": 
    #Do something 

ようなことをしたときに、これは問題を引き起こすデータベース人として考える

変数がNone型の場合はエラーが発生します。

私は

if variable is not None and variable.upper() == "X": 
    #Do something 

を行うことができます。しかし、これは不必要に冗長に思えます。

これをどのように処理するのがベストプラクティスですか?変数がどれか、空でない場合は

+0

[The Zen of Python](http://www.python.org/dev/peps/pep-0020/)から引用する:明示的なものは暗黙的なものよりも優れています。 –

答えて

9

は、あなたはそれがFalseに同等ですが、ちょうど

if variable and variable.upper() == "X": 
    #Do something 

を書き込むことによって、わずかにコードを削減することができます。

2
if variable and variable.upper() == 'X' 

は多少言葉が少なくなります。あなたが望むものなら、Noneと空文字列も同じように扱います

編集:空文字列を扱う方法で投稿した表現とは異なるセマンティクスを持っていることに注意してください。変数が空の文字列である場合、式の右辺との評価を受けるだろうが、(variable or '').upper() == 'X'またはvariable and variable.upper() == 'X'は両方の速記だろう場合は、この式の中では、空の文字列はFalse

3

に評価されないだろうと、それはとまったく確かではありません元のコードとしてコンパクト。私はあなたがはるかに良くなることはないと恐れています。

あなたは

def norm(s): 
    return s or '' 

... 
if norm(s) == 'X': 

を行うことができますが、ultimativelyそれもあまりに変更されません。おそらく、元の区別はまったく矛盾していたのではなく、むしろ文脈上非常に実用的でしたか?

関連する問題