TypeError:’NoneType’ 类型的对象在 Python 中没有 len()

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并更正赋值。

nonetype 类型的 typeerror 对象没有 len

下面是错误如何发生的示例。

主程序
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价值来源是:

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

不返回值的函数 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并更正赋值。

额外资源

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