我有:
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)
如何与其他级别的异常进行交互/不互动?
答案 0 :(得分:1)
你的逻辑是合理的。
如何处理这些供应商特定的异常,更优雅,取决于 关于供应商代码引发的例外类型。
它们是普通的python异常(例如ValueError,TypeError等)吗?然后
你没有多少选择。你应该将它们包装在通用的下面
except Exception
声明。在这些不幸的情况下,很多人
尝试通过解析异常消息来区分错误类型。
一个主要的反模式,但你能做什么?
他们是否提出了自己的供应商特定异常(最佳情况)? 然后,您可以轻松区分并更优雅地处理它们 码。他们应该有关于它的某种文档:) 或者,如果代码可用,请仔细阅读代码并亲自查看。
如果我们谈论与某些外部系统(某些人)谈话的供应商代码 例如,某种类型的数据库),它们可能具有通用的VendorException 存储在异常中的一些内部错误代码(1133,623,无论如何) instance作为属性。同样,他们很可能会有一个列表 那些错误代码,以及它们在某种文档中的描述, 您可以使用它将它们映射到您自己的自定义例外中。