Requests报”requests.exceptions.HTTPError: {http status code} {reason} “的原因以及解决办法

  • Post category:Python

HTTPError是requests库的一个异常,它表示请求返回了一个非200状态码。这种情况需要我们对异常进行处理。在处理这种异常之前,首先需要了解HTTP状态码由哪些组成以及它们的含义。

HTTP状态码是由三位数字组成的,第一个数字代表响应类型,通常的类型有四种:

  • 1xxx:表示信息类,如 100 Continue
  • 2xxx:表示成功,如 200 OK
  • 3xxx:表示重定向,如 301 Moved Permanently
  • 4xxx和5xxx:表示客户端和服务器端的错误,如 404 Not Found、500 Internal Server Error

当我们向服务器发送请求时,如果服务器没有成功响应,就会返回一个非200状态码。具体来说,当服务器返回4xx或5xx状态码时,Requests库会自动抛出一个HTTPError异常。

处理HTTPError异常的方法,一般有两种:

1.使用try-except语句进行异常捕获,根据异常信息来判定状态码是否为200,从而进行相应的处理。

import requests
try:
    resp = requests.get('https://www.example.com/')
    resp.raise_for_status()
except requests.exceptions.RequestException as e:
    print('请求失败:', e)

2.使用requests模块自带的raise_for_status()函数,此函数可以抛出HTTPError异常,如果响应状态码不是200,则抛出异常,并且在异常信息中显示状态码和原因。

import requests
resp = requests.get('https://www.example.com/')
resp.raise_for_status()

无论是哪种方式进行异常处理,都需要保证在错误发生时,正确地处理异常并且关闭打开的资源,否则会导致资源泄漏。

总之,处理HTTPError异常的关键是要清楚地了解HTTP状态码的含义,根据不同状态码进行不同的异常处理。这样可以使我们的代码更加健壮,提高程序的可靠性和稳定性。