【问题标题】:Python error : AttributeError: 'NoneType' object has no attribute 'len'Python错误:AttributeError:'NoneType'对象没有属性'len'
【发布时间】:2018-12-18 15:45:27
【问题描述】:

我的代码很简单,但我不知道为什么会抛出这个错误?

def median(numbers):
     newnumbers = numbers.sort()
     length = newnumbers.len()
     print length

median([4,6,1])

我在网上搜索了 SO 和 len() 是获取列表长度的正确方法。但是,我不断收到错误“AttributeError: 'NoneType' object has no attribute 'len'”

我在这里做错了什么?谢谢!

【问题讨论】:

  • 首先,对列表进行排序不会改变长度,所以似乎没有必要。
  • 谢谢。我只发布了我正在编写的部分功能。

标签: python


【解决方案1】:

numbers.sort() 可以正常工作 - 它会更改数字,但返回 None,这就是 newnumbers 包含的内容。 你应该使用newnumbers = sorted(numbers),这样可以解决异常。

但是,请注意不需要排序,因为您只是返回输入列表的长度。所以:

def median(numbers):
    print len(numbers)

会实现同样的效果。 (而且你没有返回中位数)

【讨论】:

  • 我想这个功能只是不完整,他打算返回numbers[len(numbers)/2]
  • 如果列表的长度是偶数,那也不会是中位数。我认为指出其他错误对他很有用,就像您在回答中对 len 所做的那样。
【解决方案2】:

这里有两个问题:

  • 列表上的sort() 方法只是修改列表,而不返回新列表,因此newnumbersNone
  • 你应该写len(newnumbers),而不是newnumbers.len()

【讨论】:

  • 这是一个错误,但不是给定错误的根本原因。
  • @chepner 你说得对——我稍微掩饰了这个问题。我的错!
【解决方案3】:

查找列表长度的语法不正确。

唯一的更改是len(newnumbers),这是必需的。由于您没有显示元素,因此无法看到排序的唯一目的,无论排序如何,长度都将保持不变。

【讨论】:

    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2023-03-03
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多