如何处理API请求中的不同响应代码?

时间:2019-07-30 13:33:27

标签: python json

我正在使用一个具有不同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

2 个答案:

答案 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'):