为何添加条件判断仍触发KeyError: #text?字典键缺失问题咨询
问题分析与解决
你的代码之所以还会抛出KeyError: #text,核心原因是在执行判断逻辑之前,你已经主动访问了不存在的键:
if house["condition"]["#text"] is str: # 这里已经在取#text的值了,不存在就直接报错 condition = ["condition"]["#text"] else: condition = "bananas"
当house["condition"]里没有#text这个键时,house["condition"]["#text"]这一步直接触发KeyError,根本轮不到后面的if判断执行。另外is str的写法也不对,判断类型应该用isinstance(),不过这不是当前报错的主要原因。
几种可行的解决方法
方法1:用字典的get()方法(最简洁)
get()方法允许你指定键不存在时的默认值,同时可以额外判断类型:
# 基础版:直接取#text,不存在就用默认值"bananas" condition = house["condition"].get("#text", "bananas") # 进阶版:同时判断值是否为字符串类型 text_val = house["condition"].get("#text") condition = text_val if isinstance(text_val, str) else "bananas"
方法2:用try-except捕获异常
直接尝试取值,捕获KeyError时处理默认情况:
try: condition = house["condition"]["#text"] # 额外判断类型 if not isinstance(condition, str): condition = "bananas" except KeyError: condition = "bananas"
方法3:先检查键是否存在
先确认#text在house["condition"]里,再取值判断:
if "#text" in house["condition"]: text_val = house["condition"]["#text"] condition = text_val if isinstance(text_val, str) else "bananas" else: condition = "bananas"
内容的提问来源于stack exchange,提问作者Paulo Alves
相关产品推荐
相关产品推荐

