说我有一个类
class Thing():
def __init__(self):
self.some_state = False
def do_stuff(self):
self.some_state = True
# do stuff which may take some time - and user may quit here
self.some_state = False
def do_other_stuff(self):
# do stuff which depends on `some_state` being False
Run Code Online (Sandbox Code Playgroud)
我想确保用户是否通过运行以下命令在笔记本中执行此操作:
thing = Thing()
thing.do_stuff()
Run Code Online (Sandbox Code Playgroud)
然后在运行时按“停止执行”,some_state切换回False. 这种方式do_other_stuff将按预期工作。有没有办法做一些优雅的清理?
注意:虽然我的例子很具体,但我的问题通常是:“我可以进行优雅的清理吗?”
停止执行会引发
KeyboardInterrupt异常,因此您需要处理该异常。但实际上,some_state如果代码也以其他异常退出,您可能需要重置。即使您没有明确提出异常,它们也可能由于代码中的错误或内存不足而发生。因此,请在finally子句中进行清理。
def do_stuff(self):
self.some_state = True
try:
# do stuff which may take some time - and user may quit here
finally:
self.some_state = False
Run Code Online (Sandbox Code Playgroud)
如果许多方法需要相同的清理,您可以使用装饰器,如Tgsmith61591 所示。