我的代碼如下所示:# 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 拋出一個(gè)錯(cuò)誤,我想為用戶捕獲并打印該錯(cuò)誤,然后退出(而不是僅打印堆棧跟蹤)。這里的具體細(xì)節(jié)是,當(dāng)調(diào)用 get_class 并且架構(gòu)尚未注冊(cè)時(shí),Marshmallow 會(huì)引發(fā)RegistryError。但是,這是完全預(yù)期的情況 - 可以嘗試添加架構(gòu),并且我想向用戶顯示該錯(cuò)誤 - 將其視為“找不到文件”錯(cuò)誤。堆棧跟蹤感覺級(jí)別太低,無(wú)法呈現(xiàn)。但是,A.some()在代碼中的許多地方都會(huì)調(diào)用它。執(zhí)行此操作的 pythonic 方法是什么?我的想法:將 marshmallow() 包裝在 try-except 中,打印出一些內(nèi)容,然后 exit()去我打電話的任何地方A.some(new_schema)并包裝它(這不是我的偏好,但如果有必要的話)還有別的事嗎?
1 回答

慕神8447489
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
解決方案
選項(xiàng) 1 - 所有A.some()
調(diào)用者的統(tǒng)一行為:將調(diào)用B.thing()
包裝在捕獲非常特定的異常A.some()
中,同時(shí)使用記錄器在退出之前try
except
在塊中記錄錯(cuò)誤。except
選項(xiàng) 2 - 調(diào)用者所需的不同行為A.some()
:如果您希望根據(jù)調(diào)用 A.some() 的上下文來(lái)改變行為,那么您需要重構(gòu)以捕獲選項(xiàng) 1 中的相同錯(cuò)誤并引發(fā)您自己的內(nèi)部錯(cuò)誤,名為FileNotFound,每個(gè)調(diào)用者都A.some()
能夠單獨(dú)處理行為。
添加回答
舉報(bào)
0/150
提交
取消