我一直在写一些python应用程序,不幸的是我偶然发现(我相信......)一个设计模式/流量控制问题。
让我们说我有一些包含多个其他功能的大功能,大功能的结果严格地由小功能成功决定。
所以大功能只包含一系列操作。
如果只有一个小函数失败那么我们应该中止大函数,不幸的是我们更深入...然后小函数对某些对象进行更多修改,所以我认为我不能中止大函数,因为我必须恢复/修复一些由小功能完成的未完成的更改 - “执行清理”。
是否有一种pythonic方法来检查/控制大函数内小函数的执行?因为我现在的解决方案看起来非常难看而且不是非常ZENish ......
这是一些代表我现在拥有的解决方案的伪代码:
def small_func():
try:
# doing something here
return True # if operation successful
except Error:
return False
def big_func():
# state var helping determine if we need to cleanup if some of the
# funtions were unsuccessful
state = True
if not small_func1():
state = False
if not small_func2():
state = False
if not small_func3():
state = False
if not small_func4():
state = False
if not small_func4():
state = False
etc...
if not state:
#perform some cleanup after failed function since we can't
#finish the big function - we need to abort and clean unfinished stuff
答案 0 :(得分:-1)
您可以先保存所有状态,在big函数中使用单个try-block,如果出现错误则在except块中重置。像这样:
def small_func():
# no try-block
def big_func():
# Save all states here
try:
small_func1()
small_func2()
small_func3()
small_func4()
except Error:
# Reset all states here