Python中的None与空字符串
我有一个现有的应用程序,它连接到一个数据库,运行在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(假)。