AttributeError: ‘NoneType’ 对象没有属性 ‘group’

AttributeError: ‘NoneType’ 对象没有属性 ‘group’

AttributeError: ‘NoneType’ object has no attribute ‘group’

Python“AttributeError: ‘NoneType’ object has no attribute” 发生在我们尝试对值调用方法时group()None例如在调用之后match()
search()没有匹配项。

要解决该错误,请if在调用之前使用语句group

attributeerror nonetype 对象没有属性组

这是一个非常简单的示例,说明错误是如何发生的。

主程序
example = None # ⛔️ AttributeError: 'NoneType' object has no attribute 'group' example.group()

尝试访问或设置None值的属性会导致错误。

如果您打印正在访问属性的变量,它将是,因此您必须追踪变量被赋值的位置并更正赋值。 NoneNone

一个不返回任何东西的函数返回 None

最常见的None值来源(显式赋值除外)是不返回任何内容的函数。

例如,

如果没有匹配项,则
re.match()
re.search方法会返回。None

主程序
import re # 👇️ None m = re.match(r"(\w+) (\w+)", "hello") # ⛔️ AttributeError: 'NoneType' object has no attribute 'group' print(m.group())

由于字符串与模式不匹配,该match()方法返回
None

使用try/except语句避免出现错误

解决该错误的一种方法是使用
try/except 语句

主程序
import re a_string = 'bobby hadz com' try: matches = re.match(r"(\w+) (\w+)", a_string).group() except AttributeError: matches = re.match(r"(\w+) (\w+)", a_string) print(matches) # 👉️ bobby hadz

如果字符串与模式不匹配,则该re.match()方法
返回 None并且在值group()上访问该方法None会导致AttributeError异常。

在这种情况下,except块在我们不调用group()方法的地方运行。

在调用 group() 之前检查值是否不为 None

您可以通过if在调用 之前使用语句检查是否存在匹配项来解决此问题group()

主程序
import re m = re.match(r"(\w+) (\w+)", "hello") if m: print(m.group()) else: print('There are no matches') # 👉️ this runs

您也可以在if语句中更明确地检查变量m
是否不是
None.

主程序
import re m = re.match(r"(\w+) (\w+)", "hello") if m is not None: print(m.group()) else: print('There are no matches')

re.search()方法可能返回 None

如果字符串中没有位置与模式匹配,re.search()方法也会返回。None

主程序
import re # 👇️ None m = re.search('(?<=abc)def', 'xyz') # ⛔️ AttributeError: 'NoneType' object has no attribute 'group' print(m.group(0))

group您可以使用相同的方法仅在匹配时调用该方法。

主程序
import re m = re.search('(?<=abc)def', 'abcdef') if m is not None: print(m.group()) # 👉️ def else: print('There are no matches')

if块仅在m变量不是时运行None,否则该
else块运行。

Match.groups()方法可能返回 None

使用Match.groups方法时也是如此

主程序
import re # 👇️ none m = re.match(r"(\d+)\.(\d+)", "hello") # ⛔️ AttributeError: 'NoneType' object has no attribute 'groups' print(m.groups())

如果没有匹配项并且未提供默认参数,则Match.groups方法返回。None

要绕过该错误,请使用一个简单的if语句。

主程序
import re # 👇️ none m = re.match(r"(\d+)\.(\d+)", "123.456") if m is not None: print(m.groups()) # 👉️ ('123', '456') else: print('There are no matches')

“AttributeError: ‘NoneType’ object has no attribute ‘group’” 的发生有多种原因:

  1. 有一个不返回任何东西的函数(None隐式返回)。
  2. 将变量显式设置为None.
  3. 将变量分配给调用不返回任何内容的内置函数的结果。
  4. 具有仅在满足特定条件时才返回值的函数。