2017-08-17 199 views
-2

有时,当我在我的python脚本中运行一个函数,并且如果函数给了我一个不需要的输出,我需要撤消这一步,然后尝试再次运行不同的参数。有没有办法让我的脚本可以撤消它的功能,如果我的功能给我一个错误的输出。只有一组参数,所需的输出是成立的。 PS:通过运行该功能意味着进行永久性更改。Python - 脚本失败时撤消脚本

例子:

def function(): 
    for i in range(parameters): 
     value = perform_operation(parameters[i]) #makes permanent changes 
     if value != some_value: 
      undo(perform_operation()) 
+0

你能举一个这样的功能的例子吗?如果你一直(或者经常地)得到错误的输出,那么这个函数可能是错误的。如果情况并非如此,只需使用'if'来检查输出的正确性:'if not correct_output:your_function(new_input)'。给出一个输出的例子,取决于你的输出看起来像撤消它是非常不同的。 – Lomtrur

+1

你是什么意思的“撤销它做了什么”?也许你可以通过'try' - 'except'子句做到这一点,在'try'中引发一个异常,并且撤销'except'除外的变化。 –

+0

只需使用条件语句? '如果有东西:value = perform_operation()elif something_else:value = whatevs ...' – 2017-08-17 08:13:28

回答

1

您需要创建另一个功能比清洁什么是在例如主要功能(删除新创建的文件,删除已安装的软件包等)进行,并使用它。

def main_func(): 
    proc = subprocess.Popen('touch test test2') 
    return proc.returncode 

def clean_main_func(): 
    subprocess.Popen('rm test test2') 


def __name__ == '__main__': 
    result = main_func() 
    if main_func() != 0 : 
     clean_main_func() 

,或者你可以再提高一个错误捕获它:

def main_func(): 
    proc = subprocess.Popen('touch test test2') 
    if proc.returncode !=0 : 
     raise Error 

def clean_main_func(): 
    subprocess.Popen('rm test test2') 


def __name__ == '__main__': 
    try: 
     result = main_func() 
    except Error: 
     clean_main_func() 

这是中庸之道的例子,希望这回答了你的问题。