Python中的None与空字符串

17 投票
4 回答
49143 浏览
提问于 2025-04-17 08:26

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

这个应用程序在使用None和""(空字符串)来填充没有值的变量时不太一致。我想把这个做得统一一些,更新代码,让它要么用None,要么用""。

从数据库的角度来看,我把None看作是Null,觉得这应该是处理空变量的正确选择,但这样做会在应用程序执行某些操作时出现问题,比如

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

因为如果变量是None类型,就会引发错误。

我可以这样做

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

但这样写起来似乎太啰嗦了。

有没有什么好的做法来处理这个问题呢?

4 个回答

3

如果用 (variable or '').upper() == 'X' 或者 variable and variable.upper() == 'X' 这两种写法,确实可以简化代码,但它们并没有比原来的代码更简洁。我担心你可能也找不到更好的写法。

你可以这样做:

def norm(s):
   return s or ''

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

不过最终效果也不会有太大变化。也许原来的区分其实并没有那么不一致,而是在特定情况下非常实用?

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

这段话说得简单一些。如果你想的话,它会把空值(None)和空字符串("")当成一样的处理。

补充一下:注意,这种写法和你之前发的表达式在处理空字符串时是有区别的……也就是说,在你的表达式中,如果变量是空字符串,右边的部分会被计算;但在这个表达式中,空字符串会被当作 False,所以右边的部分不会被计算。

15

你可以稍微减少一些代码,只需要写

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

如果这个变量是空的或者没有值,那它就相当于 False(假)。

撰写回答