为了账号安全,请及时绑定邮箱和手机立即绑定

从内部代码捕获抛出的库错误的最 Pythonic 方法是什么

从内部代码捕获抛出的库错误的最 Pythonic 方法是什么

精慕HU 2023-08-15 16:57:56
我的代码如下所示:# foo.pyfrom internallib.a import AA.some(new_schema)# a.pyfrom internallib.b import Bclass A:   @staticmethod   def some(schema_name):      B.thing(schema_name, other_parameter)# b.pyimport marshmallowclass B:   @staticmethod   def thing(schema_name, other_parameter):      marshmallow.class_registry.get_class(schema_name)Marshmallow 抛出一个错误,我想为用户捕获并打印该错误,然后退出(而不是仅打印堆栈跟踪)。这里的具体细节是,当调用 get_class 并且架构尚未注册时,Marshmallow 会引发RegistryError。但是,这是完全预期的情况 - 可以尝试添加架构,并且我想向用户显示该错误 - 将其视为“找不到文件”错误。堆栈跟踪感觉级别太低,无法呈现。但是,A.some()在代码中的许多地方都会调用它。执行此操作的 pythonic 方法是什么?我的想法:将 marshmallow() 包装在 try-except 中,打印出一些内容,然后 exit()去我打电话的任何地方A.some(new_schema)并包装它(这不是我的偏好,但如果有必要的话)还有别的事吗?
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

解决方案

选项 1 - 所有A.some()调用者的统一行为:将调用B.thing()包装在捕获非常特定的异常A.some()中,同时使用记录器在退出之前try except在块中记录错误。except

选项 2 - 调用者所需的不同行为A.some():如果您希望根据调用 A.some() 的上下文来改变行为,那么您需要重构以捕获选项 1 中的相同错误并引发您自己的内部错误,名为FileNotFound,每个调用者都A.some()能够单独处理行为。


查看完整回答
反对 回复 2023-08-15
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信