奇怪的“AttributeError:'NoneType'对象没有属性'group'”错误

时间:2018-02-23 13:02:16

标签: python string python-3.x substring

这可能是一个非常明显的错误,因为我对编码很新,但是我正在尝试读取一个特定值的文件,我将通过使用re.search和splice来收集,因为我只知道文本之前和之后。

我遇到了一个令人讨厌的bug。当我使用re.search(r“firstPart(。*?)secondPart”,数据).group(1)它返回

Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

这一行存在问题:

englishWord = re.search(r"<i>(.*?)</i>", str(englishWord)).group(1)

如果您阅读了代码,您可以看到我已经创建了一些不必要的行,而不是在re.search函数中写入整个字符串,我将只使用一点,然后在另一个函数中添加或删除文本。这是因为如果我在re.search函数中全部执行它通常不起作用。

可能是最烦人的部分,令人困惑的是,如果我在“englishWord = re.search(r”(。*?)“,str(englishWord))。group( 1)“然后我运行它,它工作,但如果我立即运行所有代码我得到了该错误。知道为什么吗?我怎样才能解决这个问题?谢谢! (我使用的是python 3.6)

我的代码vvv

#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3

import re
import itertools

with open('Desktop/data.txt', 'r') as myfile:
    data=myfile.read().replace('\n', '')

num = 0

for x in itertools.repeat(None, 8):
    num = int(num) + 1
    if int(num) < 10:
        num = '0' + str(num)
    firstString = re.search(r"id=\"question_" + num + "_whole_question\" data-sidebar-reference=\"\">    (.*?) <input", data).group(1)
    secondString = re.search(r"id=\"question_" + num + "_wol_1\"(.*?)  </div>", data).group(1)
    secondString = secondString.replace(" name=\"question_" + num + "_wol_1\" onchange=\"has_unsaved_work();\" size=\"10\" type=\"text\" />", "")
    finalString = firstString + " _" + secondString
    englishWord = re.search(r"(<i><span lang=\"en-US\">(.*?)</span></i>)", finalString)
    englishWord = re.search(r"<i>(.*?)</i>", str(englishWord)).group(1)
    englishWord = "<i>" + englishWord + "</i>"
    finalString = finalString.replace(englishWord, "")
    finalString = finalString.replace("()", "")
    print (finalString)

1 个答案:

答案 0 :(得分:0)

仅在匹配时才调用组。

res = re.search(r"<i>(.*?)</i>", str(englishWord))
# if there is a match
if res:
   englishWord = res.group(1)

正如评论中所指出的,re.search在找不到匹配项时返回None。链接:https://docs.python.org/3/library/re.html#re.search