You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码持续出现KeyError: 'rat'错误,请求排查解决

问题分析与解决

错误原因

你遇到的KeyError: 'rat'核心问题是搞反了字典的键值逻辑:

  • creature字典的键是难度类型('easy'/'medium'/'hard'),值才是对应难度的生物列表。但你用随机选中的生物名(比如'rat')作为键去访问creature字典,自然找不到匹配项,触发KeyError。
  • 后续linked = dict(zip(creature[cre], attack[cre]))不仅前提不成立,逻辑也完全偏离你“关联生物与类型”的需求。
  • 最后重新给cre赋值为随机难度类型,进一步混淆了变量含义,导致后续代码彻底失效。

修正方案

根据你“选择攻击生物、输出生物及其类型并将类型存入变量”的需求,提供两种可行实现方式:

方式一:先选难度,再选对应生物

逻辑直接,适合无需从生物反向找类型的场景:

import random

creature = {'easy': ['chicken', 'slime', 'rat'],
            'medium': ['wolf', 'cow', 'fox'],
            'hard': ['baby dragon', 'demon', 'lesser demi god']
            }

attack = {
    'easy': ['pecks you', 'spits juice at', 'scratches'],
    'medium': ['bites', 'charges at', 'bites'],
    'hard': ['spits sparks of fire at', 'rends', 'smashes']
    }

# 随机选择难度类型,并存入变量
cre_type = random.choice(list(creature.keys()))
# 从该难度的生物列表中随机选一个生物
selected_creature = random.choice(creature[cre_type])
# 随机选对应难度的攻击动作
attack_action = random.choice(attack[cre_type])

# 输出结果
print(f"遭遇{cre_type}级生物:{selected_creature},它{attack_action}!")
# 类型已保存在cre_type变量中,可直接使用
print(f"当前生物类型:{cre_type}")

方式二:先选生物,再反向查找类型

如果需要先随机选生物,再获取它的类型,可先构建生物到类型的映射:

import random

creature = {'easy': ['chicken', 'slime', 'rat'],
            'medium': ['wolf', 'cow', 'fox'],
            'hard': ['baby dragon', 'demon', 'lesser demi god']
            }

attack = {
    'easy': ['pecks you', 'spits juice at', 'scratches'],
    'medium': ['bites', 'charges at', 'bites'],
    'hard': ['spits sparks of fire at', 'rends', 'smashes']
    }

# 构建生物到类型的映射字典
creature_to_type = {}
for type_name, creature_list in creature.items():
    for cre in creature_list:
        creature_to_type[cre] = type_name

# 收集所有生物,随机选一个
all_creatures = [cre for creature_list in creature.values() for cre in creature_list]
selected_creature = random.choice(all_creatures)
# 通过映射获取生物类型
cre_type = creature_to_type[selected_creature]
# 随机选对应攻击动作
attack_action = random.choice(attack[cre_type])

# 输出结果
print(f"遭遇{cre_type}级生物:{selected_creature},它{attack_action}!")
print(f"当前生物类型:{cre_type}")

内容的提问来源于stack exchange,提问作者Victor van Lent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:05:38