我正在使用一个具有不同json响应的API,具体取决于成功/失败。它们不是HTTP错误,而是json主体中的代码。
有两个可能的错误代码(400和404),然后您将获得成功的API响应。
以下三个示例,包括成功的API调用:
j1 = {'status': '400','message': 'invalid'}
j2 = {'status': '404','message': 'wrong_info'}
j3 = {'info': 'your_info','other_info':'54321'}
我们只是说我得到了答复,但我不知道它是什么。 (让我们在下面做出成功的答复):
api_response = j3
{'info': 'your_info','other_info':'54321'}
根据它是什么,我将向数据帧添加数据,或者什么也不做:
for row in df:
# do API call and get api_response
# if the api response has an error code (first digit== 4), just skip it
if api_response['status'][:1]=='4':
pass
# if it has an 'info' key, do something
elif api_response['facebook']:
print('Found My Info')
检查status: 400 / 404
导致错误。我以为else
会解决这个问题?
KeyError Traceback (most recent call last)
<ipython-input-168-7a657630291c> in <module>
----> 1 if api_response['status'][:1]=='4':
2 pass
3 else:
4 if api_response['info']:
5 print('Found My Info')
KeyError: 'status'
我尝试过的
我添加了try except
,但是感觉就像我只是把东西放在一起而忽略了问题。这是处理这样的不同响应的可接受或“ pythonic”方式吗?另外,如果状态为pass
,我是否可以正确地使用400/404
跳过该行?
try:
if api_response['status'][:1]=='4':
pass
except:
if api_response['info']:
print('Found My Info')
Found My Info
答案 0 :(得分:3)
检查
status: 400 / 404
导致错误。我以为else
会照顾好这个?
否,因为您正在尝试访问不存在的密钥,所以首先需要测试它是否存在!
if 'status' in api_response and api_response['status'] in ('400', '404'):
print('bad request')
elif 'info' in api_response:
print('Found My Info', api_response['info'])
答案 1 :(得分:2)
如果键不存在,则可以使用dict.get
返回默认值。
您可以指定自己的默认值,否则为None
尝试:
if api_response.get('status','')[:1]=='4':
和:
if api_response.get('info'):