Python正则表达式NoneType错误

时间:2014-04-28 11:56:32

标签: python regex if-statement

我有一个名为" filename.txt"

的文本文件

文件内容:

    This is just a text
    content to store
    in a file.

我已经制作了两个python脚本来提取"到#34;来自文本文件

我的第一个剧本:

     #!/usr/bin/python
     import re
     f = open("filename.txt","r")
     for line in f:
              text = re.match(r"content (\S+) store",line)
              x = text.group(1)
              print x

我的第二个剧本:

    #!/usr/bin/python
    import re
    f = open("filename.txt","r")
    for line in f:
             text = re.match(r"content (\S+) store",line)
             if text:
                    x = text.group(1)
                    print x

第二个脚本提供正确的输出

 bash-3.2$ ./script2.py
 to

但是第一个脚本给了我一个错误

bash-3.2$ ./script1.py
Traceback (most recent call last):
File "./script1.py", line 6, in ?
x = text.group(1)
AttributeError: 'NoneType' object has no attribute 'group'

如何添加" if"条件给我正确的输出,当我删除它我得到一个错误?

2 个答案:

答案 0 :(得分:1)

这是因为在您的第一个代码中,您的正则表达式无法匹配任何内容,因此textNoneType。当您尝试执行group时,会抛出AttributeError: 'NoneType' object has no attribute 'group'错误

但是,对于正则表达式,您的代码不会失败,因为只有当某些内容 匹配时,您才会小心地调用group

你的第二种方法更好,因为它不像第一种方法那样是失败证明。

答案 1 :(得分:1)

错误对我来说非常明显:如果找不到匹配项,re.match会返回None。(请参阅doc)。

因此,当您的正则表达式不匹配(例如第一行)时,您尝试访问group对象的NoneType属性时,会抛出错误。

在另一种情况下,如果text不是None,您只能访问该媒体资源(因为这是if text:检查的内容)。