我正在尝试从 JSON API 获取一些数据。我不想要 API 返回的所有数据,所以我编写了一个方法来读取所有数据并返回包含相关字段的字典。但有时,一些数据丢失了,我想用下划线替换丢失的字段。该方法的示例就是这样;
return {
'foo': data['foo'],
'bar': data['bar']
}
如果数据中缺少某个字段,则会出现 KeyError。是否可以在单个 try-except block 中以编程方式捕获哪个字段产生了错误,而不是为每个字段编写一个 try-except block ?
try:
ret_dict = {
'foo': data['foo'],
'bar': data['bar']
}
except KeyError:
ret_dict[thefailurekey] = '_'
代替
ret_dict = {}
try:
ret_dict['foo'] = data['foo']
except KeyError:
ret_dict['foo'] = '_'
try:
ret_dict['bar'] = data['bar']
except:
ret_dict['bar'] = '_'
谢谢
请您参考如下方法:
您可能可以从 KeyError 异常对象的成员那里获取该信息,但更简单的方法是只使用 get() 将返回一个默认值如果 key 不在那里。
return {
'foo': data.get('foo', '_'),
'bar': data.get('bar', '_'),
}
这比处理异常更好的另一个原因是您只能处理一个异常。如果缺少两把 key 会怎样?最重要的是,ret_dict 甚至不会在您的示例中定义,因为代码失败。
