欢迎访问宙启技术站
智能推送

Python中HTTPUnauthorized()异常的捕获与处理

发布时间:2024-01-01 23:30:39

在Python中,可以使用try-except语句来捕获和处理异常。HTTPUnauthorized异常是指在进行HTTP请求时,未经授权或认证的异常,一般返回状态码401。

要捕获HTTPUnauthorized异常,可以使用requests模块中的异常类HTTPError,并在其基础上进一步判断是否为HTTPUnauthorized异常。以下是一个示例代码:

import requests

url = 'http://example.com/api'

try:
    response = requests.get(url)
    response.raise_for_status()  # 如果出现异常状态码,会抛出HTTPError异常
    print('请求成功!')
except requests.exceptions.HTTPError as e:
    if response.status_code == 401:
        print('未经授权的请求!')
    else:
        print('其他HTTP错误:', e)
except requests.exceptions.RequestException as e:
    print('其他请求异常:', e)

上述代码中,首先定义了一个url变量,然后使用requests.get()方法发送HTTP GET请求,并将返回的response对象保存在response变量中。

接下来,在try块内部使用response.raise_for_status()方法,如果请求出现异常状态码,会抛出一个HTTPError异常。在except块中,判断response的状态码,如果是401,则认定为未经授权的请求;否则认定为其他HTTP错误。

需要注意的是,使用requests库发送HTTP请求时,如果服务器返回状态码为401 Unauthorized时,并不会直接抛出HTTPError异常,而是返回一个正常的Response对象。只有在调用response.raise_for_status()方法时,才会抛出HTTPError异常,所以需要注意捕获HTTPError异常的位置。

另外,还可以使用requests模块自带的HTTPError异常类来捕获所有的HTTP错误,而不仅仅是未经授权的请求:

import requests

url = 'http://example.com/api'

try:
    response = requests.get(url)
    response.raise_for_status()
    print('请求成功!')
except requests.exceptions.HTTPError as e:
    print('HTTP错误:', e)
except requests.exceptions.RequestException as e:
    print('其他请求异常:', e)

上述代码中,将HTTPError捕获到的异常统一处理为HTTP错误,并使用RequestException来捕获其他的请求异常。

这样,在发送HTTP请求时,如果出现了未经授权的请求,就会捕获到HTTPError异常并输出相应的错误信息。如果是其他请求异常,也会捕获到并输出相应的错误信息。

总结来说,Python中捕获和处理HTTPUnauthorized异常可以使用requests模块提供的异常类HTTPError,并结合response对象的状态码来进一步判断具体的异常类型。在捕获异常时,可以使用多个except块来处理不同的异常类型,并输出相应的错误信息。