python字符串检查_最优雅的方法来检查Python中的字符串是否为空?

最优雅的方法来检查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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值