page contents

Python KeyError报错,1分钟排查+根治全套教程

写Python的小伙伴,几乎没人能躲开KeyError报错。

attachments-2026-06-4kKP4gts6a334c53f252f.png

写Python的小伙伴,几乎没人能躲开KeyError报错。

跑代码突然爆红终止,大概率就是这句:KeyError: 'xxx'

说白话:就是你写代码调取字典键值,用了字典里压根没有的key,程序找不到字段,直接报错罢工。

代码一运行直接爆红:KeyError: 'xxx'

本质一句话:字典/字典嵌套,调用了不存在的键key,程序找不到key,直接报错终止。

一、随手复刻报错(复制就能复现)

错误代码(直接复制运行必报错)

python                  
# 普通字典报错                  
user_info = {"name":"张三","age":22}                  
# 字典里无gender键,触发KeyError                  
print(user_info["gender"])

报错结果:KeyError: 'gender'

日常最容易翻车的,还是嵌套字典报错,对接接口、解析后端JSON数据,十次报错八次都是它。

python                  
# 接口返回嵌套字典数据                  
res = {"code":200,"data":{"nick":"小李"}}                  
# data内无phone键,直接报错                  
print(res["data"]["phone"])

 

二、不用打断点,3步快速找出问题

Step1:看报错后缀

直接看报错末尾字符,KeyError:abc,缺的键就是abc,一目了然。

Step2:打印完整字典

最简单办法:print打印完整字典,核对文字、层级、大小写。

老生常谈坑:Python字典key严格区分大小写,Name和name完全是两个字段。

Step3:核对层级

嵌套字典别越级取值,绝大多数报错,都是层级看错了,直接跨层拿key导致的。

 

三、四种解决写法,按需直接抄

写法1:dict.get()|新手通用首选

key不存在不会炸代码,自定义返回默认值,零基础闭眼用。

python                  
user_info = {"name":"张三","age":22}                  
# 不存在返回空字符串,可自定义默认值                  
gender = user_info.get("gender","未知")                  
print(gender) # 输出:未知

写法2:in关键字判断|需要分支逻辑用它

想要自定义存在/不存在逻辑,可控性更高,适合业务判断场景。

python                  
user_info = {"name":"张三","age":22}                  
if "gender" in user_info:                  
    print(user_info["gender"])                  
else:                  
    print("该键不存在")

写法3:defaultdict|批量循环取值专用

遍历字典、数据统计高频场景,不用反复写if判空,提前预设字段默认值即可。

python                  
from collections import defaultdict                  
# 不存在key默认返回空字符串                  
d = defaultdict(str)                  
d["name"] = "王五"                  
print(d["phone"]) # 不报错,输出空值

写法4:try-except捕获|爬虫/接口开发必用

第三方接口字段不稳定、爬虫解析json,容错能力最强,不会单字段缺失直接宕机。

python                  
res = {"code":200,"data":{"nick":"小李"}}                  
try:                  
    phone = res["data"]["phone"]                  
except KeyError:                  
    phone = None # 缺失键直接赋值为空                  
print(phone)

 

最后整理实操避坑要点

1.生产代码尽量少用字典[key]直取,优先改用.get(),稳很多

2.对接外部接口,一定要加异常捕获,防止字段缺失导致整条程序停下

3.不要手动手打key,极易写错大小写、字符,直接复制原有字段最稳妥

4.多层嵌套字典,逐层打印核对层级,千万别偷懒越级取值

 更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

 

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2143 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 2143 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章