Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的None与空字符串_Python_Null_Nonetype - Fatal编程技术网

Python中的None与空字符串

Python中的None与空字符串,python,null,nonetype,Python,Null,Nonetype,我有一个连接到数据库的现有应用程序。它在Python2.7下运行 应用程序使用None和“”填充没有值的变量的方式不一致。我想保持一致,并尝试以某种方式更新代码 作为一个数据库人员,我认为没有一个与Null相同,并假设这是空变量的正确选择,但当应用程序执行以下操作时,这会导致问题 if variable.upper() == "X": #Do something 因为如果变量为None类型,则会引发错误 我能行 if variable is not None and variable.

我有一个连接到数据库的现有应用程序。它在Python2.7下运行

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

作为一个数据库人员,我认为没有一个与Null相同,并假设这是空变量的正确选择,但当应用程序执行以下操作时,这会导致问题

if variable.upper() == "X":
    #Do something
因为如果变量为None类型,则会引发错误

我能行

if variable is not None and variable.upper() == "X":
    #Do something
但这似乎是不必要的冗长


有没有处理这一问题的最佳实践?

只需编写代码,就可以稍微减少代码量

if variable and variable.upper() == "X":
    #Do something
如果变量为none或空,则它相当于False

if variable and variable.upper() == 'X'
没有那么冗长。如果需要,它还将以相同的方式处理None和空字符串

编辑:请注意,这确实与您发布的表达式在处理空字符串的方式上有不同的语义。。。i、 e.在表达式中,如果变量为空字符串,则会计算and的rhs,但在此表达式中,如果
(变量或“”),则不会计算为
False
。upper()='X'
变量和变量。upper()='X'
都是简写,但它肯定没有原始代码那么紧凑。不过,我担心你不会好得多

你可以

def norm(s):
   return s or ''

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

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

对于那些想要区分空字符串(
''
)和
的人,请使用
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
引用:显式比隐式好。