我有:
- 调用外部供应商代码的函数
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)
如何与其他级别的异常交互/不交互?
最佳答案
你的逻辑很合理。
如何更优雅地处理这些供应商特定的异常,取决于 关于供应商代码引发的异常类型。
它们是普通的 python 异常吗(例如 ValueError、TypeError 等)?然后
你没有太多选择。你应该将它们包装在一个通用的
除了异常
语句。在这些不幸的情况下,很多人
尝试通过解析异常消息来区分错误类型。
这是一个主要的反模式,但你能做什么?
他们是否会提出自己的供应商特定异常(exception)情况(最好的情况)? 然后您可以轻松地区分并在您的应用程序中更优雅地处理它们 代码。他们应该有一些关于它的文档:) 或者,如果代码可用,请仔细阅读代码并亲自查看。
如果我们谈论的是与某些外部系统(某些外部系统)对话的供应商代码 例如,某种数据库),它们可能有一个通用的 VendorException 存储在异常中的一些内部错误代码(1133、623等) 实例作为属性。同样,他们很可能会列出以下内容 这些错误代码及其在某种文档中的描述, 您可以使用它们将它们映射到您自己的自定义异常中。
关于python - 处理python中的外部代码异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116666/