Python是否有类似空字符串变量的内容可以在其中执行:

if myString == string.empty:

无论如何,检查空字符串值的最优雅方法是什么? 我发现每次都很难对空字符串进行硬编码""


#1楼

a = ''
b = '   '
a.isspace() -> False
b.isspace() -> True

#2楼

您可能会看一下在Python中分配空值或字符串

这是关于比较是空字符串。 因此,您可以测试是否您的字符串等于带有""的空字符串为空的字符串,而不是使用not测试是否为空。


#3楼

我会在剥离之前测试无。 另外,我会使用一个空字符串为False(或Falsy)的事实。 这种方法类似于Apache的StringUtils.isBlank或番石榴的Strings.isNullOrEmpty

这就是我用来测试字符串是否为None或Empty或Blank的内容:

def isBlank (myString):if myString and myString.strip():#myString is not None AND myString is not empty or blankreturn False#myString is None OR myString is empty or blankreturn True

并且,与测试字符串是否不是None或NOR空或NOR空白完全相反:

def isNotBlank (myString):if myString and myString.strip():#myString is not None AND myString is not empty or blankreturn True#myString is None OR myString is empty or blankreturn False

上面代码的更简洁形式:

def isBlank (myString):return not (myString and myString.strip())def isNotBlank (myString):return bool(myString and myString.strip())

#4楼

如prmatta上面所述,但有误。

def isNoneOrEmptyOrBlankString (myString):if myString:if not myString.strip():return Trueelse:return Falsereturn False

#5楼

我曾经写过类似Bartek的答案和javascript启发的东西:

def is_not_blank(s):return bool(s and s.strip())

测试:

print is_not_blank("")    # False
print is_not_blank("   ") # False
print is_not_blank("ok")  # True
print is_not_blank(None)  # False

#6楼

对于那些期望像Apache StringUtils.isBlank或Guava Strings.isNullOrEmpty这样的行为的用户:

if mystring and mystring.strip():print "not blank string"
else:print "blank string"

#7楼

测试空字符串或空字符串(较短的方法):

if myString.strip():print("it's not an empty or blank string")
else:print("it's an empty or blank string")

#8楼

这个怎么样? 也许它不是“最优雅”的,但是看起来很完整和清晰:

if (s is None) or (str(s).strip()==""): // STRING s IS "EMPTY"...

#9楼

当您逐行读取文件并要确定哪一行为空时,请确保使用.strip() ,因为“空”行中包含换行符:

lines = open("my_file.log", "r").readlines()for line in lines:if not line.strip():continue# your code for non-empty lines

#10楼

每次检查空字符串时,我都发现用硬编码“”不好。

干净的代码方法

这样做: foo == ""是非常不好的做法。 ""是一个神奇的价值。 您永远都不应检查魔术值(通常称为魔术数 )

您应该做的是与描述性变量名称进行比较。

描述性变量名称

可能会认为“ empty_string”是一种描述性变量名。 不是

在您开始执行empty_string = ""并认为您有一个很好的变量名称要比较时,再进行操作。 这不是“描述性变量名”的含义。

一个好的描述性变量名称基于其上下文。 你要想想空字符串什么。

  • 它从何而来。
  • 为什么在那儿。
  • 为什么需要检查它。

简单表单字段示例

您正在构建一个表单,用户可以在其中输入值。 您要检查用户是否写了什么。

一个好的变量名可能不是not_filled_in

这使得代码非常可读

if formfields.name == not_filled_in:raise ValueError("We need your name")

全面的CSV解析示例

您正在解析CSV文件,并希望将空字符串解析为None

(由于CSV完全基于文本,因此如果不使用预定义的关键字,它就不能表示None

好的变量名称可能是CSV_NONE

如果您有一个新的CSV文件,该文件表示“ None且字符串以外的其他字符串"" ,则可以轻松更改和修改代码

if csvfield == CSV_NONE:csvfield = None

毫无疑问,这段代码是否正确。 很明显,它做了应该做的事情。

比较一下

if csvfield == EMPTY_STRING:csvfield = None

这里的第一个问题是,为什么空字符串应该得到特殊对待?

这将告诉以后的编码人员,应该始终将空字符串视为None

这是因为它将业务逻辑(CSV值应为None )与代码实现(我们实际比较的是什么)混合在一起

两者之间需要分开关注 。


#11楼

响应@ 1290。 抱歉,无法格式化注释中的块。 None值在Python中不是空字符串,也不是(空格)。 来自安德鲁·克拉克的答案是正确的答案: if not myString 。 @rouble的答案是特定于应用程序的,不能回答OP的问题。 如果您对“空白”字符串采用特殊定义,则会遇到麻烦。 特别地,标准行为是str(None)生成'None' ,这是一个非空白字符串。

但是,如果必须将None和(spaces)视为“空白”字符串,这是一种更好的方法:

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行为。


#12楼

not str(myString)

对于空字符串,此表达式为True。 非空字符串,None和非字符串对象都将产生False,但需要注意的是,对象可以重写__str__以通过返回虚假值来阻止此逻辑。


#13楼

str = ""
if not str:print "Empty String"
if(len(str)==0):print "Empty String"

#14楼

如果你只是用

not var1

不能将变量boolean False与空字符串''区别开''

var1 = ''
not var1
> Truevar1 = False
not var1
> True

但是,如果您在脚本中添加一个简单条件,则会有所不同:

var1  = False
not var1 and var1 != ''
> Truevar1 = ''
not var1 and var1 != ''
> False

#15楼

我觉得这很优雅,因为它可以确保它是一个字符串并检查其长度:

def empty(mystring):assert isinstance(mystring, str)if len(mystring) == 0:return Trueelse:return False

#16楼

如果这对某人有用,这是我构建的一种快速功能,可以用列表列表中的N / A替换空白字符串(python 2)。

y = [["1","2",""],["1","4",""]]def replace_blank_strings_in_lists_of_lists(list_of_lists):new_list = []for one_list in list_of_lists:new_one_list = []for element in one_list:if element:new_one_list.append(element)else:new_one_list.append("N/A")new_list.append(new_one_list)return new_listx= replace_blank_strings_in_lists_of_lists(y)
print x

这对于将列表列表发布到不接受某些字段空白(在模式中标记为NN的字段,在我的情况下,这是由于复合主键导致)的mysql数据库中很有用。


#17楼

另一个简单的方法可能是定义一个简单的函数:

def isStringEmpty(inputString):if len(inputString) == 0:return Trueelse:return False

#18楼

唯一真正可靠的方法是:

if "".__eq__(myString):

所有其他解决方案都可能存在问题,并且可能导致检查失败。

如果myString是从str继承并覆盖__len__()方法的类的对象,则len(myString)==0可能会失败。

同样,如果myString覆盖__eq__()__ne__() myString == ""myString.__eq__("")可能会失败。

由于某种原因,如果myString覆盖__eq__() "" == myString也将被愚弄。

myString is """" is myString是等效的。 如果myString实际上不是字符串而是字符串的子类(它们都将返回False ),它们都将失败。 另外,由于它们是身份检查,所以它们起作用的唯一原因是因为Python使用了String Pooling(也称为String Internment),该字符串池在被插入时使用相同的字符串实例(请参见此处: 为什么使用'=来比较字符串='或'是否'有时会产生不同的结果? )。 而""从一开始就在CPython中被嵌入

身份检查的最大问题是,据我所知,String Internment不规范要插入哪些字符串。 这意味着,理论上""不是必需的,而是依赖于实现的。

真正不能被愚弄的唯一方法是开头提到的方法: "".__eq__(myString) 。 由于此方法显式调用了空字符串的__eq__()方法,因此不能通过覆盖myString中的任何方法来欺骗它,并且可以与str子类牢固地配合使用。

如果对象覆盖了它的__bool__()方法,那么也不能依靠字符串的虚假性来工作。

这不仅是理论上的工作,而且实际上可能与实际用法有关,因为我之前看到框架和库将str子类化,并且使用myString is ""可能会在那里返回错误的输出。

另外,比较使用字符串is一般是一个非常邪恶的陷阱,因为它会正常工作有时,但不是在其他时间,因为字符串池下面很奇怪的规则。

也就是说,在大多数情况下,所有提到的解决方案都可以正常工作。 这是大多数学术工作。


#19楼

空字符串是“虚假的” ,这意味着它们在布尔上下文中被认为是错误的,因此您可以执行以下操作:

if not myString:

如果您知道变量是字符串,则这是首选方法。 如果您的变量也可以是其他类型,则应使用myString == "" 。 有关在布尔上下文中为假的其他值,请参见“ 真值测试 ”文档。


#20楼

最优雅的方法可能是简单地检查其真实性或虚假性,例如:

if not my_string:

但是,您可能要删除空格,因为:

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

但是,您可能应该对此更加明确,除非您确定该字符串已通过某种验证并且可以通过这种方式进行测试。


#21楼

从PEP 8的“编程建议”部分中 :

对于序列(字符串,列表,元组),请使用空序列为假的事实。

因此,您应该使用:

if not some_string:

要么:

if some_string:

为了明确起见,如果序列为空或不为空,则它们在布尔上下文中被评估FalseTrue 。 它们不等于 FalseTrue


#22楼

if stringname:字符串为空, if stringname: false 。 我想这不可能比这更简单。


#23楼

如果要区分空字符串和空字符串,我建议使用if len(string) ,否则,我建议仅使用if string就像其他人所说的那样。 关于充满空格的字符串的警告仍然适用,因此请不要忘记strip

如何检查字符串是否为空?相关推荐

  1. 如何检查字符串是否包含Ruby中的子字符串?

    我有一个字符串变量,内容如下: varMessage = "hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n""/my/name/is/balaji.s ...

  2. 如何在Java中检查字符串是否为数字

    在解析字符串之前,如何检查字符串是否为数字? #1楼 解析它(即使用Integer#parseInt )并简单地捕获异常. =) 需要澄清的是:parseInt函数检查它是否可以在任何情况下(显然)都 ...

  3. php 是否包含 大写,PHP检查字符串中是否包含大写字符

    PHP检查字符串中是否包含大写字符,也就是判断指定字符串中是否全为小写.我们可以通过for循环以及strlen().ord()函数来实现. 下面我们就结合具体的代码示例,给大家介绍PHP检查字符串中是 ...

  4. 空字符串字符串不为空_当字符串为空但不为空时

    空字符串字符串不为空 介绍 我团队中的一名初级程序员遇到了一个有趣的错误. 我已经不止一次看到它的症状. 这篇文章是寻找什么以及如何在将来防止它. 我还将探讨该问题的不同解决方案. 病征 有问题的代码 ...

  5. 如何使用JavaScript检查输入是否为空

    by Zell Liew 由Zell Liew 如何使用JavaScript检查输入是否为空 (How to check if an input is empty with JavaScript) L ...

  6. JavaScript中的(内置)方式来检查字符串是否为有效数字

    我希望在与旧的VB6 IsNumeric()函数相同的概念空间中有东西吗? #1楼 引用: isNaN(num)//如果变量不包含有效数字,则返回true 如果您需要检查前导/后缀空格,例如,当需要一 ...

  7. C++ 判断字符串是否为空

    C++ 判断字符串是否为空 有2种方法 1种是用使用empty 2 使用== 与"" 比较 具体的如下: #include <iostream> #include &l ...

  8. python使用正则化检查字符串的起始和结束字符相同

    python使用正则化检查字符串的起始和结束字符相同 #python使用正则化检查字符串的起始和结束字符相同 # Python program to check if a string starts ...

  9. python代码使用正则化模块re检查字符串是否只含有要求指定的字符

    python代码使用正则化模块re检查字符串是否只含有要求指定的字符 compile():正则表达式被编译成模式对象,模式对象具有用于各种操作的方法,如搜索模式匹配或执行字符串替换. search() ...

最新文章

  1. ESXI5.5添加本地磁盘出错的解决
  2. Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
  3. future career plan
  4. linux虚拟机如何加网卡,linux虚拟机添加新的网卡
  5. 小程序 || 语句_C ++条件语句| 查找输出程序| 套装1
  6. 修复安全删除硬件图标
  7. 对MYSQL进行压力测试
  8. linux控制主机风扇转速,怎么调整cpu风扇转速 cpu风扇转速调整方法【详解】
  9. 机器码、序列号、认证码、注册码的生成算法(三)
  10. win10一键激活,解除SymantecEndpointProtection的自动拦截
  11. scara机器人dh参数表_SCARA机器人驱动方式及参数初定
  12. caffe安装+Ubuntu16.04+三显卡gpu加速
  13. PS剪切蒙版怎么用?
  14. 如何在CentOS 7上安装Elasticsearch,Logstash和Kibana(ELK堆栈)
  15. 数学基础二:点到直线距离公式推导
  16. 1号线彭埠站故障已经查明 是积水导致转辙机信号不良
  17. 山东自然人dai开给于企业核定征收纳税
  18. python学习笔记P41-47
  19. 算法设计与分析--棋盘覆盖问题解决思想
  20. iqooneo5隐藏应用方法分享(2021)

热门文章

  1. 算法----实现strStr 函数
  2. Android ADB被占用 重启 ADB方法
  3. View是如何被添加到屏幕窗口上的
  4. mysql去除字符串首的非字母_如何从SQLServer中的字符串中删除所有非字母字符?...
  5. a标签跳页传参,以及截取URL参数
  6. MyBatis基于注解的使用
  7. 爬虫:获取页面 -- request库的使用
  8. 微信小程序一些知识点
  9. python socket单线程通信
  10. JavaScript的前世今生