python异常类封装_在Python中封装异常

如何使应用程序与使用过的库依赖关系所引发的异常脱钩?

[app] --uses--> [lib] --dependson--> [dependency]

/ /

x-

\ /

`-----needstohandle,soimports-----> --'

问题出在真正的pip代码上:

如何在模块B中封装异常?要从模块A删除对C的依赖?如何确保原始异常的原因和细节不丢失?换句话说,我该如何使用其他名称重新引发异常?

下面的代码片段完成了所需的操作,但仅适用于Python 3:

try:

dependency_call()

except DependencyError as exc:

raise LibraryError from exc

更新:我正在寻找Python 2兼容的解决方案,Python 3增加了…从…起到了很好的效果.

更新2:封装异常的目的是在[lib]中捕获异常,然后重新抛出一个新异常,以[app]保留堆栈跟踪,以便调试工具仍可以遍历代码(对于人为解决方案the answer by Alex Thornton应该是好).

解决方法:

您可以通过引用Exception基类来捕获任意异常:

except Exception as exc:

raise ApplicationError from exc

为了使成语在Python 2中正常工作,您必须使用自定义异常来解决:

class ApplicationError(Exception):

def __init__(self, cause, trace):

self.cause = cause

self.trace = trace

def __str__(self):

return '{origin}\nFrom {parent}'.format(origin=self.trace,

parent=self.cause)

然后像这样提高它:

except Exception, exc:

raise ApplicationError(exc)

它会在引发原因时打印出原因,如果您决定也捕获ApplicationError,那么它也是可以访问的属性.

标签:python-2-7,exception,python,pip

来源: https://codeday.me/bug/20191121/2049149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值