生成器因NoneType错误失败

1 投票
1 回答
2177 浏览
提问于 2025-04-18 18:13

我正在制作一个文字角色扮演游戏,其中一个游戏命令是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

撰写回答