或者你也可以考慮一下我想要做的替代解決方案。基本上我有一堆功能,我想包裝在嘗試/除了塊攔截KeyboardInterrupt錯誤,因爲我有一個函數,整潔地清理了我的每個功能。是否可以在類中創建裝飾器?
而不是把巨大的嘗試catch塊在每個函數中我想我可以創建一個裝飾器來做到這一點,但我遇到了一些問題。到目前爲止,我有這樣的事情
class MyClass:
def catch_interrupt(self, func):
def catcher():
try:
func()
except KeyboardInterrupt:
self.End()
return catcher
@catch_interrupt
def my_func(self):
# Start a long process that might need to be interrupted
def End(self):
# Cleans up things
sys.exit()
問題,當我跑這是我得到的錯誤
TypeError: catch_interrupt() takes exactly 2 arguments (1 given)
這甚至可能嗎?有沒有更好的方法,或者我應該在每個函數內部放置try/except塊?
不傳入自我,我會怎樣稱呼我的End()函數? –
@ProgrammerUnextraordinair實現上下文管理器中的行爲,相反,他們有一個自動清理的方法,當上下文保持不變,它甚至需要參數指示退出是由於成功完成還是引發異常。 – JAB
或者,如果您只想堅持使用當前的裝飾器,那麼'catcher()'需要將'self'作爲其第一個參數意味着您仍然可以訪問它。 – JAB