生成器因NoneType错误失败
我正在制作一个文字角色扮演游戏,其中一个游戏命令是statistics
。这个命令会打印出玩家的所有统计信息,其中之一是Defense Strength
(防御强度),这个值是根据玩家背包中第二和第三个(1和2号)位置的防具物品来决定的。游戏中的所有物品都是item
类的实例,并且都有一个Str
(强度)属性。玩家的背包是一个有5个位置的列表(这个数量是固定的),空的位置用None
表示。
为了打印玩家的防御强度,我想对背包列表中的每一个物品进行检查,如果这个物品不是None
,或者在布尔表达式中为真,我就想把它的Str
值(总是一个整数)加起来,得到一个总和。
这是我现在的代码:
print('- Defense Strength:', sum(i.Str for i in Inventory[1:3] if Inventory[i]))
但是这段代码出错了,错误信息是TypeError: list indices must be integers, not NoneType
。我该怎么解决这个问题呢!?
附注:虽然我只是在检查两个位置,但我想把这个语句写成一行,因为这个逻辑其实很简单。
1 个回答
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