如何在python中防止空值
在python中,如何检查字符串是null还是空 在c中,我们有如何在python中防止空值,python,Python,在python中,如何检查字符串是null还是空 在c中,我们有String.IsNullOrEmpty(一些字符串) 另外,我在做一些正则表达式,比如: p = re.compile(...) a = p.search(..).group(1) 若团队在索引1中并没有什么东西,那个么这将被打破,你们如何防范呢?i、 e.您如何安全地重新编写这两行?这可能不正确,但我认为如果p!=无(或可能为null/null)这可能不正确,但我认为如果p!=无(或可能为null/null)只需检查它。显式
String.IsNullOrEmpty(一些字符串)
另外,我在做一些正则表达式,比如:
p = re.compile(...)
a = p.search(..).group(1)
若团队在索引1中并没有什么东西,那个么这将被打破,你们如何防范呢?i、 e.您如何安全地重新编写这两行?这可能不正确,但我认为如果p!=无(或可能为null/null)这可能不正确,但我认为如果p!=无(或可能为null/null)只需检查它。显式比隐式好,多说一句话也不会害死你
a = p.search(...)
if a is not None:
# ...
检查一下。显式比隐式好,多说一句话也不会害死你
a = p.search(...)
if a is not None:
# ...
re模块的典型方式是:
m = p.search(..)
if m:
a = m.group(1)
或
不幸的是(或幸运的是),Python不允许您将所有内容都写在一行中。使用re模块的典型方式是:
m = p.search(..)
if m:
a = m.group(1)
或
不幸的是(或幸运的是),Python不允许您将所有内容都写在一行中。p.search(..)将返回None,如果未找到任何内容,则可以执行以下操作:
a = p.search(..)
if a is None:
# oops
print "Nothing found"
else:
print "Hooray!"
p、 搜索(..)将返回无,如果未找到任何内容,则可以执行以下操作:
a = p.search(..)
if a is None:
# oops
print "Nothing found"
else:
print "Hooray!"
“null或empty”我想你的意思是无
或”
。幸运的是,在python中,这两个值的计算结果都是False
如果你的C#看起来像这样:
if (! String.IsNullOrEmpty(some_string))
do_something();
if not some_string:
do_something()
那么您的Python将如下所示:
if (! String.IsNullOrEmpty(some_string))
do_something();
if not some_string:
do_something()
“null或empty”我想你的意思是无
或”
。幸运的是,在python中,这两个值的计算结果都是False
如果你的C#看起来像这样:
if (! String.IsNullOrEmpty(some_string))
do_something();
if not some_string:
do_something()
那么您的Python将如下所示:
if (! String.IsNullOrEmpty(some_string))
do_something();
if not some_string:
do_something()
p
不会是None
,但是p.search(“foo”)
可能是。另外,is
应该用于单身(即None
)。p
不会是None
,但是p.search(“foo”)
可能是。另外,is
应该用于单身(即None
).Python通常倾向于EAFP而不是LBYL样式,如果a
通常不是None
,那么这将比try/except
慢?与执行正则表达式相比,检查None的速度有多慢?您的首要任务应该是编写正确且可读的代码,而不是快速且错误的代码。@Tim:过早的优化以及所有这些(我认为与regex运行时相比,这并不重要)。我发现它比检查AttributeError
(这也可能隐藏打字错误)更清晰(因为re.search
返回None
是一种记录在案的行为)。@Lie:youtimeit()
编辑过它吗if
语句比try/except
语句慢得多,除非触发异常。不过,在这种情况下可能没什么大不了的。我的解决方案没有多少错误,它遵循完全相同的逻辑。我同意,对于一些不太了解re
模块的人来说,捕捉AttributeError
并不是那么明显,这是Piotr的做法的一个理由。我仍然喜欢try/except
版本,但似乎我在这里是少数:)@Tim Pietzcker:搜索一个典型的小型正则表达式r'(http | ftp):/([^@]+)@([^\/]+)”
在一个总是匹配的小字符串中:p.search(“http://some@www.example.com”)
,使用if
的版本测量值为2.8451691599999549秒,使用try
的版本测量值为2.8336125200000311秒。好的,你说得对,谢谢你为我节省了0.01秒的生命。Python通常倾向于EAFP而不是LBYL风格,如果a
通常不是None
@Tim Pietzcker:slow,这将比try/except
慢?与执行正则表达式相比,检查None的速度有多慢?您的首要任务应该是编写正确且可读的代码,而不是快速且错误的代码。@Tim:过早的优化以及所有这些(我认为与regex运行时相比,这并不重要)。我发现它比检查AttributeError
(这也可能隐藏打字错误)更清晰(因为re.search
返回None
是一种记录在案的行为)。@Lie:youtimeit()
编辑过它吗if
语句比try/except
语句慢得多,除非触发异常。不过,在这种情况下可能没什么大不了的。我的解决方案没有多少错误,它遵循完全相同的逻辑。我同意,对于一些不太了解re
模块的人来说,捕捉AttributeError
并不是那么明显,这是Piotr的做法的一个理由。我仍然喜欢try/except
版本,但似乎我在这里是少数:)@Tim Pietzcker:搜索一个典型的小型正则表达式r'(http | ftp):/([^@]+)@([^\/]+)”
在一个总是匹配的小字符串中:p.search(“http://some@www.example.com”)
,使用if
的版本测量值为2.8451691599999549秒,使用try
的版本测量值为2.8336125200000311秒。好的,你是对的,谢谢你为我节省了0.01秒的生命。但是组可能没有索引1中的任何内容。否?@Blankman:如果.group(1)
与任何内容都不匹配,那么m应该是None,或者调用m.group(1)
返回一个空字符串,这取决于你编写正则表达式的方式。如果愿意,您可以检查空字符串。但是组在索引1处可能没有任何内容。否?@Blankman:如果.group(1)
与任何内容都不匹配,则m应为无,或者调用m.group(1)
返回空字符串,具体取决于您编写正则表达式的方式。如果需要,可以检查空字符串。