10

我从这个 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

4 回答 4

22

shuffle(names)是就地操作。放下作业。

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

TypeError: object of type 'NoneType' has no len()
于 2012-07-06T03:24:00.273 回答
5

在您希望使用它之前,您不需要分配nameslistor或其他任何东西。[]

使用列表推导来制作名称列表会更整洁。

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
于 2012-07-06T03:33:35.853 回答
3

这样做的目的是什么

 names = list;

? 此外,;在 Python 中不需要。

你想要

 names = []

或者

 names = list()

在你的程序开始时?尽管给定了您的特定代码,但此语句不需要创建此names变量,因为您稍后会在从文件中将数据读入其中时这样做。

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

于 2012-07-06T03:24:22.833 回答
0

我遇到了这个问题,但是在将对象更改为 str 后,问题解决了。str(fname).isalpha():

于 2020-12-01T10:06:02.100 回答