【问题标题】:How do I resolve this python error: "TypeError: 'NoneType' object is not iterable"?如何解决此 python 错误:“TypeError: 'NoneType' object is not iterable”?
【发布时间】:2017-10-14 02:39:30
【问题描述】:

如何解决此错误?

Traceback (most recent call last):
You attacked Magus for 291 points of damage.
  File "/Users/bill/Documents/Dev/PycharmProjects/Battle/main.py", line 189, in <module>

spell, magic_dmg = enemy.choose_enemy_spell()

它只是偶尔发生。我不知道为什么它只是有时发生,为什么只有有时这个数据是“NoneType”。

for enemy in enemies:
    enemy_choice = random.randrange(0, 2)

    if enemy_choice == 0:
        target = random.randrange(0, 2)
        enemy_dmg = enemies[0].generate_damage()

        players[target].take_damage(enemy_dmg)
        print(enemy.name.replace("  ", "") + " attacks " + players[target].name.replace(" ", "") + " for", str(enemy_dmg) + ".")

    elif enemy_choice == 1:
        spell, magic_dmg = enemy.choose_enemy_spell()
        enemy.reduce_mp(spell.cost)

        if spell.type == "white":
            enemy.heal(magic_dmg)
            print(bcolors.OKBLUE + spell.name + " heals " + enemy.name.replace("  ", "") + " for", str(magic_dmg), "HP." + bcolors.ENDC)
        elif spell.type == "black":

            target = random.randrange(0, 2)

            players[target].take_damage(magic_dmg)

            print(bcolors.OKBLUE + "\n" + enemy.name.replace(" ", "") + "'s " + spell.name + " deals", str(magic_dmg),
                  "points of damage to " + players[target].name.replace("  ", "") + bcolors.ENDC)

            if players[target].get_hp() == 0:
                print(players[target].name.replace("  ", "") + " has died.")
                del players[player]

完整代码如下:https://pastebin.com/2tztP4P4

【问题讨论】:

  • 1.这段代码方式来说明问题。请仅使用minimal reproducible example 2. 在您的问题中发布代码
  • 不知道该怎么做/这意味着什么,我正在添加引用的行及其周围的内容。

标签: python python-3.x typeerror nonetype


【解决方案1】:

错误在第 400 行。您没有返回任何内容,这意味着您返回的 None 无法解包到 spell, magic_dmg

【讨论】:

  • 谢谢,但我要改成什么? if self.mp &lt; spell.cost or spell.type == "white" and pct &gt; 50: self.choose_enemy_spell() else: return spell, magic_dmg我正在尝试学习在线课程,但该课程几乎没有任何支持。我应该返回那里使它工作?
  • 返回 self.choose_enemy_spell()
【解决方案2】:

当您通过递归调用它时,您需要更改 choose_enemy_spell 函数以返回,因此该行

self.choose_enemy_spell()

改成

return self.choose_enemy_spell()

更新功能如下

def choose_enemy_spell(self):
    magic_choice = random.randrange(0, len(self.magic))
    spell = self.magic[magic_choice]
    magic_dmg = spell.generate_damage()

    pct = self.hp / self.maxhp * 100

    if self.mp < spell.cost or spell.type == "white" and pct > 50:
        return self.choose_enemy_spell()
    else:
        return spell, magic_dmg

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2021-08-08
    • 2017-08-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多