我的代码如下所示:# 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 回答
![?](http://img1.sycdn.imooc.com/545861c80001141e02200220-100-100.jpg)
慕神8447489
TA贡献1780条经验 获得超1个赞
解决方案
选项 1 - 所有A.some()
调用者的统一行为:将调用B.thing()
包装在捕获非常特定的异常A.some()
中,同时使用记录器在退出之前try
except
在块中记录错误。except
选项 2 - 调用者所需的不同行为A.some()
:如果您希望根据调用 A.some() 的上下文来改变行为,那么您需要重构以捕获选项 1 中的相同错误并引发您自己的内部错误,名为FileNotFound,每个调用者都A.some()
能够单独处理行为。
添加回答
举报
0/150
提交
取消