2017-08-17 192 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() 

這是中庸之道的例子,希望這回答了你的問題。