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

Python/Kivy出现KeyError: 'city'错误,请求技术帮助

解决KeyError: 'city'的问题

嘿,这个问题其实很好搞定!咱们先把问题根源理清楚:

问题出在哪?

你在ClinicBanner的构造函数里,把city声明成了一个独立的参数,但函数内部却试图从kwargs字典里取它——但实际上,当你调用ClinicBanner(city=city_dict['city'])时,city参数已经被单独解析出来赋值给了city形参,根本不会被放到kwargs里,所以自然会抛出KeyError: 'city'。

修复方案

这里有两种简单的修复方式,选哪种都可以:

方式一:直接使用已接收的city参数(推荐)

直接把代码里的kwargs['city']替换成已经拿到的city变量就行,修改后的Clinicbanner.py代码如下:

class ClinicBanner(GridLayout):
    rows = 1
    def __init__(self, city, **kwargs):
        super(ClinicBanner, self).__init__(**kwargs)
        centre = FloatLayout()
        # 这里直接用city参数,而不是kwargs['city']
        centre_button = Button(text=city, size_hint=(1, .8), pos_hint={"top": .2, "left": 1})
        centre.add_widget(centre_button)
        self.add_widget(centre)

方式二:将city纳入kwargs管理(适合统一处理参数的场景)

如果你希望所有参数都通过kwargs来获取,可以修改构造函数的参数定义,然后从kwargs里提取city:

class ClinicBanner(GridLayout):
    rows = 1
    def __init__(self, **kwargs):
        super(ClinicBanner, self).__init__(**kwargs)
        # 从kwargs里取出city,还可以加个默认值避免无参数报错
        city = kwargs.get('city', '默认城市')
        centre = FloatLayout()
        centre_button = Button(text=city, size_hint=(1, .8), pos_hint={"top": .2, "left": 1})
        centre.add_widget(centre_button)
        self.add_widget(centre)

这种方式下,你原来的Main.py调用代码不需要修改,依然可以用ClinicBanner(city=city_dict['city'])。

验证一下

修改完代码后再运行程序,应该就不会再出现KeyError了——因为现在你正确获取到了city参数的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:57:31