MST

星途 面试题库

面试题:Rust自定义错误与不同第三方库错误类型的兼容性处理

假设你正在使用两个第三方库,它们各自定义了自己的错误类型 `ThirdPartyError1` 和 `ThirdPartyError2`。现在你需要自定义一个错误类型 `MyError`,使其能够与这两个第三方库的错误类型相互转换,并且在错误处理流程中能够统一处理。请描述实现思路,并给出关键代码片段。
47.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义 MyError 类,继承自 Exception 类。
  2. 提供构造函数,使其能够接受 ThirdPartyError1ThirdPartyError2 类型的错误对象,并将其内部状态存储起来。
  3. 实现方法将 MyError 转换回 ThirdPartyError1ThirdPartyError2
  4. 在错误处理流程中,捕获 ThirdPartyError1ThirdPartyError2,将其转换为 MyError 进行统一处理。

关键代码片段(Python 示例)

class ThirdPartyError1(Exception):
    pass

class ThirdPartyError2(Exception):
    pass

class MyError(Exception):
    def __init__(self, original_error=None):
        self.original_error = original_error
        if isinstance(original_error, ThirdPartyError1):
            self.message = f"Converted from ThirdPartyError1: {str(original_error)}"
        elif isinstance(original_error, ThirdPartyError2):
            self.message = f"Converted from ThirdPartyError2: {str(original_error)}"
        else:
            self.message = "MyError"
        super().__init__(self.message)

    def to_third_party_error(self):
        return self.original_error

try:
    # 假设这里调用第三方库代码,可能引发 ThirdPartyError1 或 ThirdPartyError2
    raise ThirdPartyError1("Some error from ThirdParty1")
except ThirdPartyError1 as e:
    my_error = MyError(e)
    # 统一处理 MyError
    print(f"Handling MyError: {my_error}")
except ThirdPartyError2 as e:
    my_error = MyError(e)
    # 统一处理 MyError
    print(f"Handling MyError: {my_error}")

说明

  1. MyError 类的构造函数接受一个 original_error 参数,如果传入 ThirdPartyError1ThirdPartyError2,会根据类型设置相应的错误信息。
  2. to_third_party_error 方法用于将 MyError 转换回原始的第三方错误类型。
  3. try - except 块中,捕获第三方错误并转换为 MyError 进行统一处理。具体实现可能因编程语言不同而有所差异,但思路大致相同。