Python中如何使用if语句处理KeyError 为不存在的字典键自定义赋值
解决方案
以下提供几种不同实现思路的方案,可根据你的实际需求选择:
方法1:使用dict.get()方法(最简便,不修改原字典)
如果不需要把默认值写入原字典,仅需要取数时缺省返回自定义值,直接用字典内置的get方法即可:
# 先提取公共的modes字典,避免重复写长路径 modes_dict = counts_stats['games']['SPEED_UHC']['modes'] speed_uhc_team = modes_dict.get('team_normal', 你的自定义默认值) speed_uhc_solo = modes_dict.get('solo_normal', 你的自定义默认值)
请将代码中的你的自定义默认值替换为你实际需要设置的数值即可
方法2:使用dict.setdefault()方法(缺省时自动把默认值写入原字典)
如果需要当键不存在时,把自定义值存入原字典方便后续直接调用,用setdefault方法:
modes_dict = counts_stats['games']['SPEED_UHC']['modes'] speed_uhc_team = modes_dict.setdefault('team_normal', 你的自定义默认值) speed_uhc_solo = modes_dict.setdefault('solo_normal', 你的自定义默认值)
方法3:if语句分情况判断(符合你提到的if分支处理需求)
modes_dict = counts_stats['games']['SPEED_UHC']['modes'] # 处理team_normal if 'team_normal' in modes_dict: speed_uhc_team = modes_dict['team_normal'] else: speed_uhc_team = 你的自定义默认值 # 若需要把默认值写入原字典就保留下面这行,不需要可以删除 modes_dict['team_normal'] = speed_uhc_team # 处理solo_normal逻辑同理 if 'solo_normal' in modes_dict: speed_uhc_solo = modes_dict['solo_normal'] else: speed_uhc_solo = 你的自定义默认值 modes_dict['solo_normal'] = speed_uhc_solo
方法4:捕获KeyError异常实现
modes_dict = counts_stats['games']['SPEED_UHC']['modes'] try: speed_uhc_team = modes_dict['team_normal'] except KeyError: speed_uhc_team = 你的自定义默认值 modes_dict['team_normal'] = speed_uhc_team try: speed_uhc_solo = modes_dict['solo_normal'] except KeyError: speed_uhc_solo = 你的自定义默认值 modes_dict['solo_normal'] = speed_uhc_solo
补充提示:如果你不确定上层路径
games/SPEED_UHC/modes是否一定存在,可以用多层get避免上层键缺失抛出异常:modes_dict = counts_stats.get('games', {}).get('SPEED_UHC', {}).get('modes', {})
内容的提问来源于stack exchange,提问作者shadowoff09
相关产品推荐
相关产品推荐

