如何在python中防止空值

如何在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)只需检查它。显式

在python中,如何检查字符串是null还是空

在c中,我们有
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:you
timeit()
编辑过它吗
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:you
timeit()
编辑过它吗
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)
返回空字符串,具体取决于您编写正则表达式的方式。如果需要,可以检查空字符串。