Python中HTTPUnauthorized()异常的捕获与处理
在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块来处理不同的异常类型,并输出相应的错误信息。
