【问题标题】:Odd "AttributeError: 'NoneType' object has no attribute 'group'" error奇怪的“AttributeError:'NoneType'对象没有属性'group'”错误
【发布时间】:2018-08-03 13:12:37
【问题描述】:

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

我遇到了一个恼人的错误。当我使用 re.search(r"firstPart(.*?)secondPart", data).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)

【问题讨论】:

标签: python string python-3.x substring


【解决方案1】:

仅在匹配时调用组。

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

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

【讨论】:

  • 感谢您的帮助,但这将如何解释这一事实,但前提是您先运行所有前面的行,然后在运行之前编译它们?
  • 我不明白你在问什么.. 但我会建议你不要使用正则表达式进行 html 解析。有漂亮的汤。请使用那个。那你就不会有这些问题了。
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 2017-03-10
  • 2019-07-18
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多