为什么有时允许返回None的re.match上允许使用group方法?

拉杰什·库玛(Rajesh Kumar)

在以下代码中,我们不确定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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab-为什么有时xslread不允许使用数字作为工作表参数?

来自分类Dev

为什么Groovy有时有时不需要方法的返回类型(甚至def)?

来自分类Dev

为什么有时在泛型方法的定义中省略了返回类型之前的尖括号

来自分类Dev

Windows资源管理器–为什么有时在文件名中不允许使用@字符?

来自分类Dev

当代码有效时,为什么 JQuery .val() 方法有时会返回 undefined?

来自分类Dev

为什么C ++允许返回对私有成员的引用

来自分类Dev

为什么有时使用点表示法访问对象属性会返回未定义?

来自分类Dev

为什么numpy的广播有时会允许比较不同长度的数组?

来自分类Dev

为什么numpy的广播有时会允许比较不同长度的数组?

来自分类Dev

为什么使用HTML5上传器有时Request.Files.Count有时为0?

来自分类Dev

为什么使用==比较两个Integer有时可行,有时却不可行?

来自分类Dev

为什么Postgres允许我在Group By中没有列?

来自分类Dev

为什么在使用`getUserMedia`时Firefox中没有“始终允许”选项?

来自分类Dev

为什么写文件二进制方法有时返回一个字母而其他一个十六进制?

来自分类Dev

为什么不允许使用“ this”指针返回成员变量,而允许使用“ this”设置成员变量?

来自分类Dev

为什么允许静态方法调用私有方法?

来自分类Dev

为什么不允许在FQN上使用@NonNull注释?

来自分类Dev

在Ubuntu上,为什么有时有时会“ sudo apt-get”而有时却会“ sudo aptitude”?

来自分类Dev

为什么在使用constexpr时允许这样做?

来自分类Dev

为什么有时需要在docker上运行nginx?

来自分类Dev

为什么电子邮件地址中的@有时在网页上写为[at]?

来自分类Dev

为什么字体有时在Mac OS X上看起来像“胖”?

来自分类Dev

为什么二进制文件上的grep -P有时匹配错误的字节?

来自分类Dev

为什么JavaScript Promises有时既不使用.catch也不使用.then?

来自分类Dev

为什么JavaScript Promises有时既不使用.catch也不使用.then?

来自分类Dev

为什么我的gcc允许此空函数具有指针返回类型?

来自分类Dev

为什么Rust的示例猜测游戏允许匹配语句具有不同的返回类型?

来自分类Dev

为什么有时看不到这些隐藏的静态方法?

来自分类Dev

如何默认禁用特定用户帐户的 Internet 访问,但有时允许使用密码访问?

Related 相关文章

  1. 1

    Matlab-为什么有时xslread不允许使用数字作为工作表参数?

  2. 2

    为什么Groovy有时有时不需要方法的返回类型(甚至def)?

  3. 3

    为什么有时在泛型方法的定义中省略了返回类型之前的尖括号

  4. 4

    Windows资源管理器–为什么有时在文件名中不允许使用@字符?

  5. 5

    当代码有效时,为什么 JQuery .val() 方法有时会返回 undefined?

  6. 6

    为什么C ++允许返回对私有成员的引用

  7. 7

    为什么有时使用点表示法访问对象属性会返回未定义?

  8. 8

    为什么numpy的广播有时会允许比较不同长度的数组?

  9. 9

    为什么numpy的广播有时会允许比较不同长度的数组?

  10. 10

    为什么使用HTML5上传器有时Request.Files.Count有时为0?

  11. 11

    为什么使用==比较两个Integer有时可行,有时却不可行?

  12. 12

    为什么Postgres允许我在Group By中没有列?

  13. 13

    为什么在使用`getUserMedia`时Firefox中没有“始终允许”选项?

  14. 14

    为什么写文件二进制方法有时返回一个字母而其他一个十六进制?

  15. 15

    为什么不允许使用“ this”指针返回成员变量,而允许使用“ this”设置成员变量?

  16. 16

    为什么允许静态方法调用私有方法?

  17. 17

    为什么不允许在FQN上使用@NonNull注释?

  18. 18

    在Ubuntu上,为什么有时有时会“ sudo apt-get”而有时却会“ sudo aptitude”?

  19. 19

    为什么在使用constexpr时允许这样做?

  20. 20

    为什么有时需要在docker上运行nginx?

  21. 21

    为什么电子邮件地址中的@有时在网页上写为[at]?

  22. 22

    为什么字体有时在Mac OS X上看起来像“胖”?

  23. 23

    为什么二进制文件上的grep -P有时匹配错误的字节?

  24. 24

    为什么JavaScript Promises有时既不使用.catch也不使用.then?

  25. 25

    为什么JavaScript Promises有时既不使用.catch也不使用.then?

  26. 26

    为什么我的gcc允许此空函数具有指针返回类型?

  27. 27

    为什么Rust的示例猜测游戏允许匹配语句具有不同的返回类型?

  28. 28

    为什么有时看不到这些隐藏的静态方法?

  29. 29

    如何默认禁用特定用户帐户的 Internet 访问,但有时允许使用密码访问?

热门标签

归档