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

如何使用try-except块处理ResponseError()异常

发布时间:2024-01-16 10:11:48

在 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 块是处理异常的一种常用方法,可以帮助我们优雅地处理发生的异常,提升程序的健壮性。