または、私がやろうとしていることの代替ソリューションを考えることができるかもしれません. 基本的に、各関数をきちんとクリーンアップする関数があるため、 KeyboardInterruptエラーをインターセプトするために try/except ブロックでラップしたい関数の束を持つクラスがあります。
各関数に巨大な try 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 ブロックを配置する必要がありますか?