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
相关产品推荐
相关产品推荐

