python - 在函数内执行多个函数时的流控制

时间:2017-03-12 21:02:50

标签: python

我一直在写一些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

1 个答案:

答案 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