最优雅的方法来检查Python中的字符串是否为空?
Python是否有类似空字符串变量的地方?:
if myString == string.empty:
无论检查空字符串值的最优雅方法是什么? 我发现硬编码""每次都检查空字符串不太好。
22个解决方案
1488 votes
空字符串是“falsy”,这意味着它们在布尔上下文中被视为false,因此您可以这样做:
if not myString:
如果您知道您的变量是字符串,那么这是首选方法。 如果您的变量也可以是其他类型,则应使用myString == ""。有关布尔上下文中为false的其他值,请参阅真值测试文档。
Andrew Clark answered 2019-01-13T06:07:32Z
315 votes
从PEP 8开始,在“编程建议”部分中:
对于序列,(字符串,列表,元组),请使用空序列为假的事实。
所以你应该使用:
if not some_string:
要么:
if some_string:
只是为了澄清,如果序列是空的,则在布尔上下文中将序列评估为False或True。 它们不等于False或True。
zenpoy answered 2019-01-13T06:08:16Z
172 votes
最优雅的方式可能是简单地检查它的真实性或假性,例如:
if not my_string:
但是,您可能希望剥离空格,因为:
>>> bool("")
False
>>> bool(" ")
True
>>> bool(" ".strip())
False
你可能应该更明确一点,除非你确定这个字符串已经通过了某种验证,并且是一个可以通过这种方式测试的字符串。
Bartek answered 2019-01-13T06:08:55Z
64 votes
剥离之前我会测试一下。 另外,我会使用空字符串为False(或Falsy)的事实。 这种方法类似于Apache的StringUtils.isBlank或Guava的Strings.isNullOrEmpty
这是我用来测试字符串是否为空或空或空白:
def isBlank (myString):
if myString and myString.strip():
#myString is not None AND myString is not empty or blank
return False
#myString is None OR myString is empty or blank
return True
并且,如果字符串不是测试,则完全相反无NOR空NOR空白:
def isNotBlank (myString):
if myString and myString.strip():
#myString is not None AND myString is not empty or blank
return True
#myString is None OR myString is empty or blank
return False
以上代码的更简洁形式:
def isBlank (myString):
return not (myString and myString.strip())
def isNotBlank (myString):
return bool(myString and myString.strip())
rouble answered 2019-01-13T06:09:37Z
27 votes
我曾经写过类似于Bartek的回答和javascript启发的内容:
def isNotEmpty(s):
return bool(s and s.strip())
测试:
print isNotEmpty("") # False
print isNotEmpty(" ") # False
print isNotEmpty("ok") # True
print isNotEmpty(None) # False
vault answered 2019-01-13T06:10:02Z
12 votes
测试空或空白字符串(更短的方式):
if myString.strip():
print("it's not an empty or blank string")
else:
print("it's an empty or blank string")
prrvchr answered 2019-01-13T06:10:24Z
9 votes
如果你想区分空字符串和空字符串,我建议使用if len(string),否则,我建议使用简单的if string,正如其他人所说。 关于充满空白字符串的警告仍然适用,所以不要忘记strip。
Silas Ray answered 2019-01-13T06:10:46Z
8 votes
if my_string is '':
我没有注意到任何答案中的特定组合。 我找了
is ''
在发布之前的答案中。
if my_string is '': print ('My string is EMPTY') # **footnote
我认为这就是原始海报试图达到的目标......尽可能接近英语并遵循可靠的编程实践。
if my_string is '':
print('My string is EMPTY')
else:
print(f'My string is {my_string}')
角色的角色我觉得这个解决方案很好。
我注意到None已进入讨论区,因此我们进一步加入并进一步压缩:
if my_string is '': print('My string is Empty')
elif my_string is None : print('My string.... isn\'t')
else: print(f'My string is {my_string}')
MikeyB answered 2019-01-13T06:11:35Z
7 votes
a = ''
b = ' '
a.isspace() -> False
b.isspace() -> True
Roman Semirook answered 2019-01-13T06:11:51Z
5 votes
我发现硬编码(sic)“”每次都检查一个空字符串不是那么好。
清洁代码方法
这样做:None是非常糟糕的做法。 ""是一个神奇的价值。 你永远不应该检查魔法值(通常称为魔法数字)
您应该做的是与描述性变量名称进行比较。
描述性变量名称
有人可能会认为“empty_string”是一个描述性的变量名。 事实并非如此。
在你去之前做None并认为你有一个很好的变量名来比较。 这不是“描述性变量名称”的含义。
一个好的描述性变量名称基于其上下文。你必须考虑空字符串是什么。
它从何而来。
为什么会这样。
你为什么需要检查它。
简单的表单字段示例
您正在构建一个用户可以输入值的表单。 您想检查用户是否写了某些内容。
一个好的变量名可能是None
这使得代码非常易读
if formfields.name == not_filled_in:
raise ValueError("We need your name")
完整的CSV解析示例
您正在解析CSV文件,并希望将空字符串解析为None
(由于CSV完全基于文本,因此在不使用预定义关键字的情况下不能代表None)
一个好的变量名可能是None
如果您有一个新的CSV文件代表None,而另一个字符串不是"",这使得代码很容易更改和调整
if csvfield == CSV_NONE:
csvfield = None
关于这段代码是否正确,没有任何问题。 很明显,它做了它应该做的事情。
比较这个
if csvfield == EMPTY_STRING:
csvfield = None
这里的第一个问题是,为什么空弦需要特殊处理?
这将告诉未来的编码员空字符串应始终被视为None。
这是因为它混合了业务逻辑(什么CSV值应该是None)和代码实现(我们实际比较的是什么)
两者之间需要分离。
firelynx answered 2019-01-13T06:15:00Z
4 votes
if stringname:在字符串为空时给出false。 我想它不能比这更简单。
Kakashi answered 2019-01-13T06:15:22Z
2 votes
回应@ 1290。 对不起,没办法在评论中格式化块。 bool值在Python中不是空字符串,也不是(空格)。 安德鲁·克拉克的答案是正确的:if not myString. @ trouble的答案是特定于应用程序的,并没有回答OP的问题。 如果你采用一个特殊的“空白”字符串定义,你会遇到麻烦。 特别是,标准行为是str(None)生成'None',非空字符串。
但是,如果您必须将bool和(空格)视为“空白”字符串,这里有一个更好的方法:
class weirdstr(str):
def __new__(cls, content):
return str.__new__(cls, content if content is not None else '')
def __nonzero__(self):
return bool(self.strip())
例子:
>>> normal = weirdstr('word')
>>> print normal, bool(normal)
word True
>>> spaces = weirdstr(' ')
>>> print spaces, bool(spaces)
False
>>> blank = weirdstr('')
>>> print blank, bool(blank)
False
>>> none = weirdstr(None)
>>> print none, bool(none)
False
>>> if not spaces:
... print 'This is a so-called blank string'
...
This is a so-called blank string
满足@rouble的要求,同时不破坏字符串的预期bool行为。
Chris Johnson answered 2019-01-13T06:16:00Z
1 votes
not str(myString)
对于空的字符串,此表达式为True。 非空字符串,None和非字符串对象都将产生False,但需要注意的是,对象可能会覆盖__str__以通过返回伪值来阻止此逻辑。
Fax answered 2019-01-13T06:16:22Z
1 votes
如果你只是使用
not var1
不可能将一个变量boolean False与空字符串''区分开来:
var1 = ''
not var1
> True
var1 = False
not var1
> True
但是,如果向脚本添加简单条件,则会产生以下差异:
var1 = False
not var1 and var1 != ''
> True
var1 = ''
not var1 and var1 != ''
> False
jberrio answered 2019-01-13T06:17:10Z
1 votes
这个怎么样? 也许它不是“最优雅的”,但看起来非常完整和清晰:
if (s is None) or (str(s).strip()==""): // STRING s IS "EMPTY"...
BuvinJ answered 2019-01-13T06:17:43Z
1 votes
以下是其中之一
foo is ''
甚至
empty = ''
foo is empty
geckos answered 2019-01-13T06:18:21Z
0 votes
您可以在Python中查看此分配空值或字符串
这是关于比较空的字符串。 所以不用not测试空虚,你可以测试你的字符串是否等于空字符串""空字符串...
octoback answered 2019-01-13T06:19:07Z
0 votes
对于那些期望像apache StringUtils.isBlank或Guava Strings.isNullOrEmpty这样的行为的人:
if mystring and mystring.strip():
print "not blank string"
else:
print "blank string"
kommradHomer answered 2019-01-13T06:19:37Z
0 votes
str = ""
if not str:
print "Empty String"
if(len(str)==0):
print "Empty String"
Tanmoy Datta answered 2019-01-13T06:20:45Z
-1 votes
当您逐行读取文件并想确定哪一行为空时,请确保使用.strip(),因为“空”行中有新的行字符:
lines = open("my_file.log", "r").readlines()
for line in lines:
if not line.strip():
continue
# your code for non-empty lines
Pavel Štěrba answered 2019-01-13T06:21:20Z
-2 votes
正如上面张贴的prmatta,但有错误。
def isNoneOrEmptyOrBlankString (myString):
if myString:
if not myString.strip():
return True
else:
return False
return False
Shadow answered 2019-01-13T06:22:22Z
-8 votes
根据我的经验,测试""并不总是有效。 这个简单的测试一直对我有用:
if MyString == 'None'
要么
if MyString != 'None'
读取Excel电子表格我希望在使用以下while循环使列变空时停止:
while str(MyString) != 'None':
Tomas Kollen answered 2019-01-13T06:23:11Z