我是python新手,遇到了一个非常具体的问题。我需要从具有类似结构的各种json文件中读取数据。其过程是:将json文件加载到字典中,将dict中的相关数据保存在一个列表中,以便将其插入mysql数据库。问题是:json文件的某些字段不一定出现在每个json文件中。某些文件中缺少某些字段,有时甚至在同一个文件中也缺少,如:
"actions": [
{
"acted_at": "2014-12-10",
"action_code": "Intro-H",
"references": [],
"text": "Introduced in House",
"type": "action"
},
{
"acted_at": "2014-12-10",
"action_code": "H11100",
"committees": [
"HSWM"
],
"references": [],
"status": "REFERRED",
"text": "Referred to the House Committee on Ways and Means.",
"type": "referral"
},
{
"acted_at": "2014-12-12",
"action_code": "B00100",
"references": [
{
"reference": "CR E1800-1801",
"type": null
}
],
"text": "Sponsor introductory remarks on measure.",
"type": "action"
}
]
下面是一段代码片段,说明我的程序的相关部分(与问题相关)的作用:
hr_list = []
with open("data.json") as json_data:
d = json.load(json_data)
actions_list.append((
d["actions"][j]["acted_at"],
d["actions"][j]["action_code"],
d["actions"][j]["status"],
d["actions"][j]["text"],
d["actions"][j]["type"]))
如您所见,该文件有一些一致性。问题是:只要其中一个字段不存在,我就会收到一个 KeyError
声明没有此类数据可附加到列表中。我需要做的是处理这个异常的方法,比如添加一些类型的“null”数据作为默认值,这样它就不会返回任何错误(当添加到数据库时,无论如何都是null)。
3条答案
按热度按时间yzxexxkh1#
你可以用
dict.get()
指定默认值,如:rqqzpn5f2#
首先,我要把代码从
with
阻止。第二,如果我必须按你的要求做,我会使用一个函数来获取可选值/返回none。
或者,作为验证步骤,您可以检查所有数据的键,然后检索值。
此外,您还可以使用
get
函数dict
为了得到value
的key
如果存在,则返回一些默认值。如果你想安全返回
None
对于最深的巢穴,你可以做以下几点vsnjm48y3#
你是自己提的。使用try-catch逻辑,您可以捕获特定的错误并处理它们,而不会中断程序的执行,从而填充空数据点。
因此,在代码片段中,将append方法用
try
,然后添加except
之后。下面是关于try-catch逻辑的python文档。https://docs.python.org/3/tutorial/errors.html#handling-例外情况你提到的例外,keyerror,记录在这里。然后是一个
KeyError
第一个参数是引发异常的键。这样,您就可以在cause
.这样,就可以填充缺少的值。