使用Python请求模块时尝试/例外

mroriel:

做一些API测试并尝试创建给定输入URL的函数,它将返回json响应,但是如果HTTP错误是响应,则将返回错误消息。

我以前使用的是urllib2,但是现在尝试使用请求。但是,无论错误如何,看来我的except块都不会执行。

testURL = 'http://httpbin.org/status/404'


def return_json(URL):
    try:
        response = requests.get(URL)
        json_obj = response.json()
        return json_obj
    except requests.exceptions.HTTPError as e:
        return "Error: " + str(e)

我从运行上面得到的结果...

<Response [404]>
伊恩·斯台普顿·科尔达斯科(Ian Stapleton Cordasco):

如果您希望响应引发非200状态代码的异常,请使用response.raise_for_status()您的代码将如下所示:

testURL = 'http://httpbin.org/status/404'


def return_json(URL):
    response = requests.get(testURL)

    try:
        response.raise_for_status()
    except requests.exceptions.HTTPError as e:
        # Whoops it wasn't a 200
        return "Error: " + str(e)

    # Must have been a 200 status code
    json_obj = response.json()
    return json_obj

您可以看出,这显然比此处的其他解决方案简单,并且不需要您手动检查状态代码。您还会发现一个问题,HTTPError因为这raise_for_status将会引发。捕捉RequestsException是一个糟糕的主意。这将捕获诸如ConnectionErrors或TimeoutErrors之东西。这些都与您要捕获的东西没有相同的含义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试导入嵌套模块时ModuleNotFound错误在Python

为什么在使用“ import ... as ...”时,Python 2为何尝试将模块作为包属性?

Python:尝试使用请求发布表单

尝试/使用Python请求模块的正确方法?

使用Python“请求”模块的代理

使用Python“请求”模块的代理

如何使用Python的“请求”模块“登录”网站?

如何使用Python的“请求”模块“登录”网站?

尝试安装模块时出现Python`no module pip .__ main __;`错误

使用python请求模块进行HTTP删除

尝试使用“请求”模块时导入错误

使用Python的“请求”模块登录ASP网站

尝试在本地网站上使用python请求时的503响应

尝试使用数据进行POST时,Python请求获取TypeError

尝试导入Python模块时MATLAB在Linux上崩溃

尝试读取使用Python数组模块创建的数据文件时出现问题

尝试使用pip安装“请求”包时发生Python错误

WinError 10060尝试使用Python PySFTP模块连接到远程服务器时出错

使用Python请求模块上传文件

尝试在Python中导入Prov模块时出现ImportError

python-尝试使用复制模块创建火花数据帧的副本时出现递归错误

使用请求模块时保留特殊字符

使用 Python 请求模块登录 Robinhood

使用 python 中的请求模块连接到 Azure-Datalakes-gen2 时遇到问题

尝试使用请求库 Python 发送视频时出错

Python C API:使用 MSVC 尝试示例模块时出现访问冲突

使用 Python 请求模块时解析 Angular.JS

例外:尝试使用 Microsoft 登录时关联失败

尝试使用 Python 和请求将文件上传到表单时我做错了什么?