Python:TypeError:'NoneType'类型的对象没有len()

时间:2012-07-06 03:23:11

标签: python

我从这个Python代码中收到错误:

with open('names') as f:
    names = f.read()
    names = names.split('\n')
    names.pop(len(names) - 1)
    names = shuffle(names)
    f.close()

assert len(names) > 100

错误:

Python: TypeError: object of type 'NoneType' has no len()

断言语句抛出了这个错误,我做错了什么?

4 个答案:

答案 0 :(得分:15)

shuffle(names)是一个就地操作。放弃作业。

此函数返回None,这就是您收到错误的原因:

TypeError: object of type 'NoneType' has no len()

答案 1 :(得分:3)

在您希望使用它之前,您无需将names分配给list[]或其他任何内容。

使用列表推导来制作名称列表更为全面。

shuffle修改您传递给它的列表。它总是返回None

如果您使用的是上下文管理器(with ...),则无需显式关闭文件

from random import shuffle

with open('names') as f:
    names = [name.rstrip() for name in f if not name.isspace()]
    shuffle(names)

assert len(names) > 100

答案 2 :(得分:2)

这个

的目的是什么?
 names = list;

?此外,Python中不需要;

你想要吗

 names = []

 names = list()

在你的计划开始时呢?虽然给出了特定的代码,但是这个语句不需要创建这个names变量,因为稍后当你从文件中读取数据时会这样做。

@JBernardo已经指出了代码的另一个(也是更重要的)问题。

答案 3 :(得分:-1)

我当时面临这个问题,但是将对象更改为str后,问题解决了。 str(fname).isalpha():