AttributeError: ‘NoneType’ 对象没有属性 ‘append’
AttributeError: ‘NoneType’ object has no attribute ‘append’
Python“AttributeError: ‘NoneType’ object has no attribute ‘append’” 发生在我们尝试对值调用append()
方法时None
,例如从不返回任何内容的函数中赋值。
要解决该错误,请确保仅调用append()
列表对象。
这是一个非常简单的示例,说明错误是如何发生的。
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()
,它将是,因此您必须追踪变量被赋值的位置并更正或删除赋值。 None
None
不返回任何内容的函数返回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
出现错误的原因有多种:
- 有一个不返回任何东西的函数(
None
隐式返回)。 - 将变量显式设置为
None
. - 将变量分配给调用不返回任何内容的内置函数的结果。
- 具有仅在满足特定条件时才返回值的函数。
许多内置方法返回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
显式检查该变量是否不存在。None
append()
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’
一文中的说明进行操作。
# 额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: