2017-09-28 11 views
0

Réécriture pour le rendre plus clair, mais je crois que Clark J l'a eu. J'ai fichier avec un contenu comme celui-ci:Méthode idéale pour implémenter la méthode de nettoyage en Python

class tests: 

    def test1(self): 
     create something1 

    def test2(self): 
     create something2 
    . 
    . 
    . 
    . 

    def test19(self): 
     cleanup something1 

    def test20(self): 
     cleanup something2 

Si test1 ou test2 échoue, il laisse quelque chose1, quelque chose2. Vous vous demandez si utiliser "try: finally:" est correct dans le style ci-dessous, de sorte que test19 et test20 s'exécutent à chaque fois que le programme se ferme ou s'il existe une façon plus idéale de le faire différemment. Fondamentalement, mon objectif est de s'assurer que test19 et test20 sont toujours exécutés avant que le programme ne se termine en cas d'échecs dans d'autres tests. Merci.

class tests: 

    try: 

     def test1(self): 
      create something1 

     def test2(self): 
      create something2 
     . 
     . 
     . 
     . 

    finally: 

     def test19(self): 
      cleanup something1 

     def test20(self): 
      cleanup something2 

Répondre

1

Je ne vois pas pourquoi vous ne pourriez pas utiliser try finally blocks.

Vous pouvez également utiliser le module atexit. Qui exécute les fonctions enregistrées après la fin de votre programme. Il fait partie de la lib standard en python 2 et en python 3.

import atexit 

@atexit.register #decorator call only works for functions without args 
def function_to_run_on_exit(): 
    print ("doing some awesome teardown and cleanup") 

def exit_function_with_args(foo, bar): 
    print("cleaning up {} and {}").format(foo, bar)) 



atexit.register(exit_function_with_args, 'my foo', 'my bar')