没有vs Python中的空字符串

时间:2011-12-15 11:50:10

标签: python null nonetype

我有一个连接数据库的现有应用程序。它在Python 2.7下运行。

应用程序在使用None和“”填充没有值的变量的方式上不一致。我想使这一点保持一致,并尝试以某种方式更新代码。

作为一个数据库人思考我认为None与Null一样,并认为这是空变量的正确选择但是当应用程序执行类似

之类的操作时会导致问题
if variable.upper() == "X":
    #Do something

如果变量为None类型,则会引发错误。

我能做到

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

但这似乎不必要地冗长。

是否有最佳实践应该如何处理?

4 个答案:

答案 0 :(得分:10)

只需编写

即可略微减少代码
if variable and variable.upper() == "X":
    #Do something

如果变量为none或为空,则它等于False。

答案 1 :(得分:3)

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

不那么罗嗦。如果你想要的话,它也会以同样的方式处理None和空字符串

编辑:请注意,这对你在处理空字符串的方式中发布的表达式有不同的语义...即在你的表达式中,如果变量是空字符串,则会得到rhs的rhs,但在此表达式中它不会因为空字符串的计算结果为False

答案 2 :(得分:3)

如果(variable or '').upper() == 'X'variable and variable.upper() == 'X'都是速记,但它肯定不像原始代码那么紧凑。不过,我担心你不会好多了。

你可以做到

def norm(s):
   return s or ''

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

但最终它也不会改变太多。也许最初的区别根本不是那么不一致,而是在上下文中非常务实?

答案 3 :(得分:0)

对于那些想将None与空字符串('')进行区分的人,请使用str

def is_empty_string(value):
...     return str(value) == ''
...
is_empty_string(None)
False

is_empty_string(0)
False

is_empty_string(' ')
False

is_empty_string('')
True