Skip to main content
 首页 » 编程设计

python之如何以编程方式捕获哪个命令在 try block 上失败

2025年05月04日10myhome

我正在尝试从 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 甚至不会在您的示例中定义,因为代码失败。