如何检查一个str(variable)是否为空?

110

我如何制作:

if str(variable) == [contains text]:

判断条件?

(或其他什么,因为我很确定我刚写的完全是错的)

我有一个列表,想要检查从列表中 random.choice 是否是["",](空白)或包含["text",]


你的意思是 if str(variable) == "my text": 吗? - Simon Bergot
你似乎有点困惑,我建议你阅读一下Python教程 - Rik Poggi
3
可能是Python中检查字符串是否为空的最优雅方法?的重复问题。 - Ronak Shah
14个回答

197
你可以将你的字符串与空字符串进行比较:
if variable != "":
    etc.

但是你可以将其缩写为以下形式:

if variable:
    etc.

解释:实际上,if 语句通过计算给定逻辑表达式的值(TrueFalse)来工作。如果您只是使用变量名(或文字字符串,比如 "hello"),而不是一个逻辑测试,规则是:一个空字符串计算为 False,其它所有字符串计算为 True。空列表和数字零也计算为 False,而大多数其他内容都计算为 True。


呵呵,我有点理解 If、True 和 False 的原理了。魔兽争霸 3 触发器编辑器:“if (这个单位等于那个单位) == True”。 - user1275670
我猜在魔兽编辑器中也可以省略== True这部分。 - alexis
实际上等价于:如果变量不存在 - Andrea Bergonzo
1
没错,AndreaBergonzo所说的是:当你将一个字符串与“”进行比较时,你正在检查它是否为空--这被视为False。 - alexis
@variable,不要那样做is测试对象的相等性,只有当所有空字符串都被“埋葬”(表示为对同一存储对象的引用)时才能按预期工作,而Python不能保证这一点。(它可能在Cpython中工作,但您依赖于特定于实现的行为。) - alexis
显示剩余3条评论

23

检查字符串是否为空的“Pythonic”方法是:

import random
variable = random.choice(l)
if variable:
    # got a non-empty string
else:
    # got an empty string

17

只需使用 if sif not s。例如:

s = ''
if not s:
    print 'not', s

因此,在您具体的示例中,如果我理解正确...

>>> import random
>>> l = ['', 'foo', '', 'bar']
>>> def default_str(l):
...     s = random.choice(l)
...     if not s:
...         print 'default'
...     else:
...         print s
... 
>>> default_str(l)
default
>>> default_str(l)
default
>>> default_str(l)
bar
>>> default_str(l)
default

我不明白。如果我执行“variable = random.choice(list)”,并且变量是一个空格“”,那么我只需要执行条件“if variable:”就可以了,然后... 是的,我不太理解你写的其他内容... - user1275670
@user1275670,听起来你好像已经明白了。但是我添加了另一个例子以防万一。简而言之,''评估为False,因此如果您想在s为空字符串时得到True,则可以使用if not s - senderle

14

默认情况下,空字符串为False:

>>> if not "":
...     print("empty")
...
empty

8

有时候我们在引号之间会有更多的空格,那么可以采用这种方法

a = "   "
>>> bool(a)
True
>>> bool(a.strip())
False

if not a.strip():
    print("String is empty")
else:
    print("String is not empty")

7

对于Python 3,您可以使用bool()函数。

>>> bool(None)
False
>>> bool("")
False
>>> bool("a")
True
>>> bool("ab")
True
>>> bool("9")
True

这本来是完美的,但 bool(0) 返回 False - kaushal agrawal
1
@kaushalagrawal 对我来说,bool(0) 返回 False 是可以预料的。为什么不应该呢? - Thai Tran
真的,我不记得/理解为什么我会有那种感觉。 - kaushal agrawal

4
element = random.choice(myList)
if element:
    # element contains text
else:
    # element is empty ''

3

我如何创建一个: if str(variable) == [包含文本]: 条件?

也许最直接的方法是:

if str(variable) != '':
  # ...

注意,if not ...的解决方案测试相反的条件。

2
string = "TEST"
try:
  if str(string):
     print "good string"
except NameError:
     print "bad string"

4
在StackOverflow上,通常为发布的代码添加注释是一种好的实践。 - King Midas
虽然这个答案可能是正确和有用的,但最好还是附加一些解释来说明它如何解决问题。如果将来出现了(可能无关的)变化导致其停止工作,并且用户需要了解它曾经如何工作,这会变得特别有用。 - Erty Seidohl
抱歉,我的英语很糟糕,但将来我会记得注释我的帖子。 - Cornea Valentin
不幸的是,我无法打印出“bad string”。我像这样进行了测试:string = "" - AhmFM
尽量不要设置字符串,否则会得到错误的字符串结果。 - Cornea Valentin

2
如果变量包含文本,则: len(variable) != 0 如果不包含文本,则: len(variable) == 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接