在Python中处理外部代码异常
我有:
- 一个函数
call_vendor_code()
,它会调用外部供应商的代码; - 一个异常类
MyDomainException(Exceprion)
。
我知道函数 call_vendor_code()
可能会抛出 MyDomainException
(因为这个函数里的逻辑是我写的)。但是,我怎么知道在 call_vendor_code()
的子调用中,供应商代码可能会抛出哪些异常呢?
举个例子:
def call_vendor_code():
if not vendor.package.module.make_more_love():
raise MyDomainException('Not enough love.')
供应商的代码可能会抛出我没有处理的其他异常。虽然可以拦截所有来自供应商代码的异常,但我觉得这样做不好。
def call_vendor_code():
try:
if not vendor.package.module.make_more_love():
raise MyDomainException('Not enough love.')
except Exception, e:
raise MyDomainException(e)
我该如何处理或不处理其他层级的异常呢?
1 个回答
2
你的逻辑是正确的。
如何更优雅地处理这些特定于供应商的异常,主要取决于供应商代码抛出的异常类型。
它们是普通的Python异常(比如ValueError、TypeError等)吗?如果是这样,你的选择不多。你应该把它们放在一个通用的except Exception
语句里。在这种不太理想的情况下,很多人会尝试通过解析异常信息来区分错误类型。这是一种常见的反模式,但你也无能为力。
如果它们抛出的是自己特定的异常(这是最理想的情况)呢?那么你就可以更轻松地在代码中区分和处理这些异常。它们应该有一些相关的文档说明 :) 或者,如果代码是公开的,可以自己看看代码。
如果我们谈论的是与外部系统(比如某种数据库)交互的供应商代码,它们可能会有一个通用的VendorException,并且在异常实例中存储一些内部错误代码(比如1133、623等)作为属性。同样,它们很可能会在某种文档中列出这些错误代码及其描述,你可以用这些信息将它们映射到你自己的自定义异常中。