在python中处理外部代码异常

时间:2014-08-04 10:31:07

标签: python exception exception-handling code-organization

我有:

  1. 调用外部供应商代码的函数call_vendor_code();
  2. 异常类MyDomainException(Exceprion)
  3. 我知道函数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 个答案:

答案 0 :(得分:1)

你的逻辑是合理的。

如何处理这些供应商特定的异常,更优雅,取决于 关于供应商代码引发的例外类型。

它们是普通的python异常(例如ValueError,TypeError等)吗?然后 你没有多少选择。你应该将它们包装在通用的下面 except Exception声明。在这些不幸的情况下,很多人 尝试通过解析异常消息来区分错误类型。 一个主要的反模式,但你能做什么?

他们是否提出了自己的供应商特定异常(最佳情况)? 然后,您可以轻松区分并更优雅地处理它们 码。他们应该有关于它的某种文档:) 或者,如果代码可用,请仔细阅读代码并亲自查看。

如果我们谈论与某些外部系统(某些人)谈话的供应商代码 例如,某种类型的数据库),它们可能具有通用的VendorException 存储在异常中的一些内部错误代码(1133,623,无论如何) instance作为属性。同样,他们很可能会有一个列表 那些错误代码,以及它们在某种文档中的描述, 您可以使用它将它们映射到您自己的自定义例外中。