2011-12-15 48 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也不会也会改变得多。也许最初的区别根本就不那么不一致,而是在上下文中非常务实。