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

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

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

Python“AttributeError: ‘NoneType’ object has no attribute ‘append’” 发生在我们尝试对值调用append()方法时None,例如从不返回任何内容的函数中赋值。

要解决该错误,请确保仅调用append()列表对象。

attributeerror nonetype 对象没有附加属性

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

主程序
my_list = None # ⛔️ AttributeError: 'NoneType' object has no attribute 'append' my_list.append('bobbyhadz.com') # ✅ if you need to check if not None before calling append() if my_list is not None: print('variable is NOT None') my_list.append('hello') else: print('variable is None')

如果您需要
在调用之前
检查变量是否为 Noneappend(),请使用if语句。

主程序
my_list = None if my_list is not None: print('variable is NOT None') my_list.append('hello') else: # 👇️ this runs print('variable is None')

尝试对值调用该append()方法None会导致错误。

如果您打印正在调用的变量append(),它将是,因此您必须追踪变量被赋值的位置并更正或删除赋值。 NoneNone

不返回任何内容的函数返回None

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

主程序
# 👇️ this function returns None def get_list(): print(['bobby', 'hadz', '.']) # 👇️ None my_list = get_list() # ⛔️ AttributeError: 'NoneType' object has no attribute 'append' my_list.append('com')

请注意,我们的get_list函数没有显式返回值,因此它隐式返回 None

我们将调用函数的结果分配给一个变量,并尝试调用导致错误的地方。 append

出现错误的原因有多种:

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

许多内置方法返回None

一些内置方法(例如sort)就地改变数据结构并且不返回值。换句话说,他们隐含地返回None

主程序
my_list = ['c', 'b', 'a'] my_sorted_list = my_list.sort() print(my_sorted_list) # 👉️ None # ⛔️ AttributeError: 'NoneType' object has no attribute 'append' my_sorted_list.append('d')

sort()方法就地对列表进行排序并且不返回任何内容,因此当我们将调用该方法的结果分配给变量时,我们None
为该变量分配了一个值。

避免使用会改变原始列表的方法进行赋值,因为它们中的大多数不返回值并隐式返回None

None在调用 append() 之前检查变量是否存在

如果一个变量可能有时存储一个列表,有时存储一个列表,您可以在调用之前None显式检查该变量是否不存在Noneappend()

主程序
my_list = ['bobby', 'hadz', '.'] if my_list is not None: print('variable is not None') my_list.append('com') else: print('variable is None') print(my_list) # 👉️ ['bobby', 'hadz', '.', 'com']

if仅当my_list变量不存储值时该块才会运行None
,否则该
else块将运行。

或者,您可以在调用 之前检查变量是否存储列表
list.append()

主程序
my_list = ['bobby', 'hadz', '.'] if isinstance(my_list, list): print('variable is not None') my_list.append('com') else: print('variable is None') print(my_list) # 👉️ ['bobby', 'hadz', '.', 'com']

如果传入的对象是传入类的实例或子类,则isinstance函数返回
True

主程序
my_list = ['bobby', 'hadz', '.'] print(isinstance(my_list, list)) # 👉️ True print(isinstance(my_list, str)) # 👉️ False

一个只有在满足条件时才返回值的函数

错误的另一个常见原因是具有仅在满足条件时才返回值的函数。

主程序
def get_list(a): if len(a) > 3: return a my_list = get_list(['a', 'b']) print(my_list) # 👉️ None

if函数中的语句get_list在传入列表的长度大于 时运行3

在所有其他情况下,该函数不返回任何内容并最终隐式返回None

要解决这种情况下的错误,您要么必须检查函数是否未返回None,要么在不满足条件时返回默认值。

主程序
def get_list(a): if len(a) > 3: return a return [] my_list = get_list(['a', 'b']) print(my_list) # 👉️ []

现在,无论是否满足条件,该函数都保证返回一个列表。

list.append()方法只能在列表中调用

list.append ()方法将一个项目添加到列表的末尾。

主程序
my_list = ['bobby', 'hadz'] my_list.append('com') print(my_list) # 👉️ ['bobby', 'hadz', 'com']

该方法None在改变原始列表时返回。

如果错误仍然存​​在,请按照我的
AttributeError: ‘NoneType’ object has no attribute ‘X’
一文中的说明进行操作。

# 额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: