【问题标题】:TypeError: object of type 'NoneType' has no len(), Empty Variable? [duplicate]TypeError:“NoneType”类型的对象没有 len(),空变量? [复制]
【发布时间】:2020-05-26 06:33:48
【问题描述】:

我正在尝试编写一个递归函数,该函数将从提供的列表中返回最大值。我有一些代码正在尝试测试,但它引发了以下错误:

  line 10, in array_max
    if pos == len(num_list):
    TypeError: object of type 'NoneType' has no len()

我从一些探索中收集到 num_list = num_list.sort() 正在返回 None。我不知道为什么。以下是我当前的功能:

def array_max(num_list, pos = 0):
    num_list = num_list.sort()

    if pos == len(num_list):
        return num_list[pos]

    counting = array_max(num_list, pos+1)
    return counting

l1 = [5,6,3,44,1,-5]
test = array_max(l1)
print(test)

为了澄清,我不是在寻找有关其他功能的建议。我只是对为什么会收到此错误感到困惑。谢谢。

【问题讨论】:

  • realpython.com/python-sort,特别是sort() returns None and modifies the values in place
  • 如果您已经对数组进行了排序并且知道最后一个元素将包含最大值,为什么还需要递归?
  • @Black0ut 坦率地说,我只是想找出一种方法来让递归函数返回列表中的最大值。只要我能做到,我对如何做到这一点并不特别。这可能不是一个很好的方法,但这是我想到的方法。
  • @kaya3 这很有帮助。谢谢。

标签: python typeerror nonetype


【解决方案1】:

list.sort() 函数不返回新列表,而是返回None;因此您稍后会收到NoneType 错误。相反,它会对列表的特定实例进行排序。

基本上,您正在存储.sort() 函数的返回值(即None),然后尝试使用len(num_list) 获取它的长度 len(None)

>>>a = [1, 4, 3, 2]
>>>a.sort()
>>>a
[1, 2, 3, 4]

sorted() 函数返回一个新列表。

>>>a = [1, 4, 3, 2]
>>>b = sorted(a)
>>>b
[1, 2, 3, 4]

【讨论】:

    猜你喜欢
    • 2021-03-03
    • 2015-07-30
    • 1970-01-01
    • 2018-08-14
    • 2016-06-06
    • 1970-01-01
    • 2018-06-11
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多