2011-12-15 47 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/):顯式優於隱式。 – 2011-12-15 11:53:09

回答

9

你可以在代碼僅通過寫

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

如果變量是沒有或空切略有下降,那麼它等同於假。

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

稍微羅嗦一點。它也將以相同的方式對待None和空字符串,如果這是你想要的東西

編輯:請注意,這與你處理空字符串的方式發佈的表達式有不同的語義...即在你的如果變量是空字符串表達式的RHS,並會得到評估,但在這種表達它不會爲空字符串的計算結果爲False

3

如果(variable or '').upper() == 'X'variable and variable.upper() == 'X'都希望能速記,但它肯定不是完全一樣緊湊的原始代碼。不過,我擔心你不會變得更好。

你可以做

def norm(s): 
    return s or '' 

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

但ultimatively也不會也會改變得多。也許最初的區別根本就不那麼不一致,而是在上下文中非常務實。