AttributeError: ‘NoneType’ 对象没有属性 ‘group’
AttributeError: ‘NoneType’ object has no attribute ‘group’
Python“AttributeError: ‘NoneType’ object has no attribute” 发生在我们尝试对值调用方法时group()
,None
例如在调用之后match()
或search()
没有匹配项。
要解决该错误,请if
在调用之前使用语句group
。
这是一个非常简单的示例,说明错误是如何发生的。
example = None # ⛔️ AttributeError: 'NoneType' object has no attribute 'group' example.group()
尝试访问或设置None
值的属性会导致错误。
None
None
一个不返回任何东西的函数返回 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’” 的发生有多种原因:
- 有一个不返回任何东西的函数(
None
隐式返回)。 - 将变量显式设置为
None
. - 将变量分配给调用不返回任何内容的内置函数的结果。
- 具有仅在满足特定条件时才返回值的函数。