gpt4 book ai didi

python - 使用 Python 请求模块时尝试/除外

转载 作者:太空狗 更新时间:2023-10-29 17:10:11 27 4
gpt4 key购买 nike

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

我之前使用的是 urllib2,但现在尝试改用 requests。然而,无论错误如何,我的 except block 似乎从未执行过。

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]>

最佳答案

如果您希望响应针对非 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 是个糟糕的主意。这将捕获 ConnectionErrorTimeoutError 等内容。这些都与您要捕获的内容不同。

关于python - 使用 Python 请求模块时尝试/除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com