我从这个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()
断言语句抛出了这个错误,我做错了什么?
答案 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():