我的代碼如下所示:# 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()
能夠單獨處理行為。
添加回答
舉報
0/150
提交
取消