当前位置: 首页 > 知识库问答 >
问题:

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

邰伟彦
2023-03-14

我使用的API根据成功/失败有不同的json响应。它们不是HTTP错误,而是json主体中的代码。

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')

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”的方式来处理类似的不同响应吗?另外,如果存在400/404状态,我是否正确地使用pass来跳过该行?

try:
    if api_response['status'][:1]=='4':
        pass
except:
    if api_response['info']:
        print('Found My Info')
Found My Info

共有1个答案

濮宇定
2023-03-14

检查状态:400/404导致错误。我以为els会解决这个问题?

不,因为您试图访问一个不存在的密钥,所以首先您需要测试它是否存在!

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'])
 类似资料:
  • 问题内容: 我试图打开登录页面(GET),获取网络服务器提供的cookie,然后提交用户名和密码对以登录网站(POST)。 看着这个Stackoverflow问题/答案,我认为我会做以下事情: 但是,标头中有一个,但该对象中没有改变。实际上,链接问题的回答将表明没有内容被填充。 我在代码中通过使用标头字典来解决此问题,并在执行GET或POST之后使用此标头处理: 然后在请求方法中传递标头。这是正确

  • 我有一个在数据库上运行查询的API。由于查询执行时间可能很长,比如3分钟到10分钟,我的负载平衡器返回“上游请求超时”,但我可以看到查询已提交到数据源,但对最终用户来说,它显示了错误的消息。如何应对这种情况? 我的职能

  • 我一直试图向facebook发送HTTP POST请求,但没有成功。我从服务器收到以下响应: HTTP/1.1 400不良请求内容-类型:text/html;charset=utf-8日期:2016年12月10日星期六21:28:17 GMT连接:关闭内容-长度:2959 Facebook |错误 抱歉,出了点问题,我们正在修理,会尽快修好的 我的密码 我做错了什么?

  • 我试图在Flutter应用程序中使用AWS DynamoDB,由于缺乏官方的AWS Dart SDK,我被迫使用低级别的HTTP REST API。 签署AWS HTTP请求的方法非常繁琐,但使用AWS提供的示例作为指导,我能够相对轻松地将Python转换为Dart。最终结果是两组代码产生相同的身份验证签名。 当我真的去发送请求时,我的问题来了。Python的工作原理与预期一致,但使用Dart的H

  • 我知道这个问题已经被问了很多,但我所看到的答案都没有帮助我澄清这个问题。我需要更多的指导方针,而不是一个具体的答案。 错误,没有这样的用户 到目前为止,我所尝试的是为列表中收到的每个对象创建一个类: 和Api,我认为这就是问题所在: 提前感谢!!

  • 前言 Networkclient的poll函数: 其实是不断去查询请求是否超时 对 因为长期没有收到请求,设置状态为disconnect,然后希望重新建立连接