在以下代码中,我们不确定match
方法(p.match
)的输入是什么,因此结果可能是None
,例如:
>>> import re
>>> p = re.compile('[a-z]+')
>>> p.match("").group(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
那么将group
方法直接应用于方法的返回值就可以了match
吗?为什么Python允许这样做,即使p.match
可以return None
呢?
在没有匹配项的情况下re.match
返回的原因None
是,它可以使以下各项正常工作:
if re.match(pattern, string):
# do whatever with the string
正如文档所述:
None
如果字符串与模式不匹配,则返回;否则返回false。请注意,这与零长度匹配不同。
该match
对象将始终评估真理-Y在布尔上下文,而None
判断为假-Y。
Python不会阻止您编写re.match(...).group(...)
代码的原因是,在代码真正运行之前,很难说出re.match(...)
返回的内容:您可能已经重新定义re
或进行了猴子补丁match
;争论是未知的;等等。这是因为就键入和自省而言,Python是一种非常动态的语言。
因此,您有两种选择,要么选择一下,然后再进行跳跃:
match = re.match(...)
if match:
match.group(...)
try:
re.match(...).group(...)
except AttributeError:
pass
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句