如何使用try-except块处理ResponseError()异常
在 Python 中,我们可以使用 try-except 块来处理异常。try 块中的代码被称为“受保护的代码”,即会尝试执行的代码。如果这些代码引发了异常,那么就会转到 except 块中的代码,这样我们就可以对异常进行处理。
ResponseError 是一个自定义的异常类,可能在网络请求过程中抛出。下面是一个使用 try-except 块处理 ResponseError 异常的例子:
class ResponseError(Exception):
def __init__(self, status_code):
self.status_code = status_code
super().__init__(f'ResponseError with status code {status_code}')
def make_request(url):
# 这里是模拟的网络请求过程,假设我们请求的结果有不同的状态码
status_code = 500 # 假设我们的请求结果状态码是 500
if status_code == 200:
# 请求成功
return 'Success'
elif status_code == 404:
# 请求的资源未找到
raise ResponseError(404)
elif status_code == 500:
# 服务器内部错误
raise ResponseError(500)
if __name__ == "__main__":
url = "http://example.com"
try:
response = make_request(url)
print(response)
except ResponseError as e:
print(f"Caught ResponseError with status code {e.status_code}")
except Exception as e:
print(f"Caught unknown exception: {e}")
在上面的例子中,我们首先定义了一个自定义的异常类 ResponseError,它包含一个 status_code 属性来表示异常的状态码。在 make_request 函数中,我们模拟了一个网络请求过程,并根据不同的状态码抛出不同的 ResponseError 异常。
在主程序中,我们使用 try-except 块来调用 make_request 函数。如果没有发生异常,我们将打印请求的结果。如果发生了 ResponseError 异常,我们就可以捕获并处理这个异常。通过 except ResponseError as e 这样的语法,我们可以访问异常对象的属性,比如 status_code。如果捕获到其他未知的异常,我们同样可以将其捕获并进行处理。
需要注意的是,except 块中的异常类型可以有多个,比如我们还可以使用 except FileNotFoundError 来处理文件未找到的异常。此外,我们也可以在 except 块后面加上 else 块和 finally 块,用于分别处理没有异常和无论是否发生异常都要执行的代码。
以短网址转换为长网址的 API 请求为例,我们可以使用 try-except 块来处理可能出现的异常,如网络错误、请求超时等:
import requests
# 短网址 API 的请求函数
def convert_to_long_url(short_url):
try:
response = requests.get(f"http://example.com/api/convert?short_url={short_url}")
response.raise_for_status() # 如果请求失败,会抛出一个 HTTPError 异常
return response.text
except requests.exceptions.RequestException as e:
print(f"Error occurred during API request: {e}")
return None
if __name__ == "__main__":
short_url = "http://t.cn/abcdefg"
long_url = convert_to_long_url(short_url)
if long_url:
print(f"The long URL of {short_url} is {long_url}")
else:
print("Failed to convert the short URL to a long URL.")
在上述例子中,我们使用 requests 库发送了一个 GET 请求,并检查响应的状态码。如果状态码不是 200,那么调用 raise_for_status() 方法会抛出一个 HTTPError 异常。我们可以使用 except 块来捕获这个异常,并进行进一步处理,例如打印错误信息。
总之,try-except 块是处理异常的一种常用方法,可以帮助我们优雅地处理发生的异常,提升程序的健壮性。
