TypeError: ‘NoneType’ 类型的对象在 Python 中没有 len()
TypeError: object of type ‘NoneType’ has no len() in Python
None
当我们将值传递给函数时,会出现 Python“TypeError: object of type ‘NoneType’ has no len()” len()
。
要解决错误,请找出变量在何处被赋值None
并更正赋值。
下面是错误如何发生的示例。
my_list = None # ⛔️ TypeError: object of type 'NoneType' has no len() print(len(my_list))
None
我们尝试获取导致错误的值的长度。
None
使用前检查变量是否未存储len()
if
如果您需要
在获取变量长度之前检查变量是否未存储 None 值,请使用语句。
my_list = None if my_list is not None: print(len(my_list)) else: # 👇️ this runs print('Variable stores a None value')
或者,您可以提供一个空列表或一个空字符串作为后备。
my_list = None if my_list is None: my_list = [] print(len(my_list)) # 👉️ 0
如果变量存储一个None
值,它将被设置为一个空列表。
您还可以添加一个else
声明。
my_list = None if my_list is None: my_list = [] else: print('The variable is not None', len(my_list)) print(len(my_list)) # 👉️ 0
如果变量存储一个None
值,它将被设置为if
块中的一个空列表。
否则,else
块运行并且变量不是None
。
最常见的None
价值来源
最常见的None
价值来源是:
- 有一个不返回任何东西的函数(
None
隐式返回)。 - 将变量显式设置为
None
. sort()
将变量分配给调用不返回任何内容的内置函数(例如 )的结果
。- 具有仅在满足特定条件时才返回值的函数。
不返回值的函数 returnNone
不显式返回值的函数 return None
。
# 👇️ this function returns None def get_list(): print(['a', 'b', 'c']) # 👇️ None my_list = get_list() # ⛔️ TypeError: object of type 'NoneType' has no len() print(len(my_list))
您可以使用return 语句从函数返回值。
def get_list(): return ['a', 'b', 'c'] # 👇️ None my_list = get_list() print(len(my_list)) # 👉️ 3
我们使用一条return
语句从函数返回一个列表并将列表传递给函数len()
。
许多内置方法None
在 Python 中返回
请注意,有许多内置函数(例如sort()
)可以就地改变原始对象并返回None
。
my_list = ['c', 'b', 'a'] # 👇️ None result = my_list.sort() print(result) # 👉️ None print(my_list) # 👉️ ['a', 'b', 'c']
Python 中有一个约定,用于内置方法,这些方法会在适当的位置改变对象以返回 None。
list.append()
, list.extend()
,等方法list.sort()
就地改变列表并返回 None。
确保您没有将调用此类函数的结果存储在变量中。
有一个只有在满足条件时才返回值的函数
错误的另一个常见原因是具有仅在满足条件时才返回值的函数。
def get_list(a): if len(a) > 3: return a # 👇️ None my_list = get_list(['a', 'b']) # ⛔️ TypeError: object of type 'NoneType' has no len() print(len(my_list))
if
函数中的语句仅get_list
在传入参数的长度大于 时运行3
。
None
。要解决这种情况下的错误,您要么必须检查函数是否没有返回None
,要么在不满足条件时返回默认值。
def get_list(a): if len(a) > 3: return a return [] # 👈️ return empty list if condition not met my_list = get_list(['a', 'b']) print(my_list) # 👉️ [] print(len(my_list)) # 👉️ 0
现在,无论条件是否满足,函数都保证返回一个值。
len ()函数返回对象的长度(项目数)。
当我们将一个对象传递给len()
函数时,Python 会__len__()
在底层调用该对象的方法。
由于None
值没有__len__
属性,因此会导致错误。
要解决该错误,请追踪变量在何处被赋值None
并更正赋值。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: