Python中如何处理API返回的JSON响应状态码及KeyError问题?
解决方案与最佳实践
首先明确两个核心问题的结论:
pass的使用完全正确:它在这里的语义就是“跳过当前行,不执行任何后续操作”,完全符合Python的语法规范和代码风格。- 你原本的
try-except写法有优化空间,主要问题是裸except会捕获所有异常,可能隐藏非预期的错误(比如api_response本身为None、字段类型错误等),且逻辑可以更清晰。
下面是几种更符合Python风格的写法,按推荐程度排序:
1. 使用字典get()方法(最推荐)
利用字典的get()方法安全获取status字段,当字段不存在时返回默认值(这里设为空字符串),无需异常捕获,逻辑直观易懂:
for row in df: # 调用API获取api_response status = api_response.get('status', '') if status.startswith('4'): pass # 跳过错误行 elif 'info' in api_response: print('Found My Info') # 执行info对应的业务逻辑
2. 预先判断键是否存在
直接检查status和info字段是否存在,这种写法逻辑清晰,适合对API响应结构完全明确的场景:
for row in df: # 调用API获取api_response if 'status' in api_response and api_response['status'].startswith('4'): pass elif 'info' in api_response: print('Found My Info') # 执行info对应的业务逻辑
3. 优化后的try-except写法
如果坚持使用异常捕获,一定要指定具体的异常类型(这里是KeyError),避免捕获无关异常:
for row in df: # 调用API获取api_response try: status = api_response['status'] if status.startswith('4'): pass except KeyError: # 没有status字段,判定为成功响应 if 'info' in api_response: print('Found My Info') # 执行info对应的业务逻辑
为什么不推荐裸except?
裸except会捕获所有类型的异常(比如TypeError、NameError等),如果API调用返回非字典类型的响应,或者代码出现拼写错误,都会被这个except块掩盖,导致你无法及时发现真正的问题。
内容的提问来源于stack exchange,提问作者SCool
相关产品推荐
相关产品推荐

