生成器失败,出现NoneType错误

时间:2014-08-22 17:53:00

标签: python list generator

我正在创建一个文本RPG,其中一个游戏命令是statistics。它打印所有玩家的统计数据,其中一个是Defense Strength,这是由玩家库存的第二和第三(1,2)个位置中的防守项目决定的。游戏中的所有项目都是item类的实例,并具有属性Str(强度)。播放器的广告资源是一个包含5个广告位(永不更改)的列表,空广告位用None表示。

要打印播放器的防御强度,对于清单列表中的每个项目,如果它不是None,或者在布尔语句中为True,我想添加其Str值(总是一个int)创建总和。

这就是我所拥有的:

print('- Defense Strength:', sum(i.Str for i in Inventory[1:3] if Inventory[i]))

然而,这失败了错误TypeError: list indices must be integers, not NoneType 我该如何解决这个问题??

PS:即使我只迭代2个索引,我想只用1行创建这个语句,因为它非常简单。

1 个答案:

答案 0 :(得分:2)

使用if i代替if Inventory[i],您尝试使用NoneType进行索引

您已经在对Inventory项进行了迭代,因此if i会过滤NoneTypes

你基本上是这样做的:

l = [1,2,None,None]
for i in l:
    if l[i]: # trying to access list using None as an index
        print (i)

TypeError: list indices must be integers, not NoneType

当你应该做的时候:

for i in l:
    if i: # check if element is not None
       print (i)
1 # prints values that are not None
2