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

使用字典选择执行函数时全部函数触发执行的问题排查

问题分析与解决方案

嘿,刚接触Python遇到这个问题太正常啦!你现在的代码里,字典的每个值不是函数本身,而是你直接调用函数后得到的返回值——因为你给每个函数名加了(),这会让Python在创建字典的那一刻就把所有函数都执行一遍,不管你最后选的是哪个race。

问题根源

比如你写"Dragonborn": self.character_race.select_dragonborn()的时候,Python看到括号就会立刻执行select_dragonborn(),把它的返回值存在字典里,而不是把这个函数“存起来备用”。所以每次调用set_race,不管传什么参数,所有种族的选择函数都会先跑一遍。

修复后的代码

你需要把字典里的值改成函数的引用(也就是不带括号的函数名),等需要执行的时候再加上括号调用它:

def set_race(self, race):
    race_list = {
        "Dragonborn": self.character_race.select_dragonborn,
        "Dwarf": self.character_race.select_dwarf,
        "Elf": self.character_race.select_elf,
        "Gnome": self.character_race.select_gnome,
        "Half-Elf": self.character_race.select_halfelf,
        "Halfling": self.character_race.select_halfling,
        "Half-Orc": self.character_race.select_halforc,
        "Human": self.character_race.select_human,
        "Tiefling": self.character_race.select_tiefling
    }
    # 现在才调用选中的函数
    race_list[race]()

额外小建议

为了避免用户输入不存在的种族导致KeyError,你可以用get()方法做个容错处理,比如:

selected_function = race_list.get(race)
if selected_function:
    selected_function()
else:
    print(f"抱歉,不存在名为 {race} 的种族!")

这样代码会更健壮哦~

内容的提问来源于stack exchange,提问作者Bolwic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:16:42