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

