python - 处理python中的外部代码异常

标签 python exception code-organization

我有:

  1. 调用外部供应商代码的函数call_vendor_code()
  2. 异常类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/

相关文章:

java - 编码风格和组织

python - 上采样不平衡数据集的小类

python - 生成 2 的平方根的数字

python - Python 中的纳什均衡

python - 除了已加载的C库中的Python错误之外

c++ - Release模式工作正常但 Debug模式给出未处理的异常 - 使用 Octave DLL

python - bs4 文档有什么问题?我无法运行 unwrap() 示例代码

swift - 共享多种异常类型的异常处理代码

java - 引用 JAXB jar - 最佳实践

c++ - 关于C++编程实践的看法