亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從內部代碼捕獲拋出的庫錯誤的最 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 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號