1

J'ai écrit une bibliothèque testing/fuzzing qui vous permet simplement de lui donner une fonction à tester et la librairie va générer un test automatique pour trouver ce qui casse la fonction afin que vous puissiez prendre la bonne fonction.Comment découper une traceback avant de lever une exception dans python?

heres the link to battle_tested

Le projet se révèle être un succès et il est vraiment utile pour faire ce que je voulais. Le problème que je rencontre est la taille de la trace lorsqu'il trouve un problème. Puisque cette bibliothèque crée des tests de manière entièrement mécanisée, la fonction testée va faire exploser 5 ou 6 niveaux dans ma bibliothèque. Cela fait que 80% de la traceback n'est rien d'autre que des appels différents à travers la bibliothèque avant d'arriver à la fonction testée pour montrer quelle ligne dans la fonction a explosé.

heres a link to a small demo that demonstrates how large the traceback is

Ma question: Y at-il un moyen de couper retraçage il ne montrera que les étapes en dehors de ma bibliothèque avant de soulever l'exception? J'essaie vraiment de rendre cette bibliothèque de test conviviale et la traceback étendue et illisible semble être le point douloureux pour les personnes qui ont essayé de l'utiliser et qui ne savent pas exactement ce que la bibliothèque fait en dessous.

Merci pour l'aide à l'avance.

Répondre

2

Vous pouvez toujours utiliser traceback.format_exc() lignes de division() pour créer une liste.

#!/usr/bin/env python3 
import traceback 


def thing_that_will_blowup(): 
    assert False is True 


def catch_it_blowup(): 
    try: 
     thing_that_will_blowup() 
    except AssertionError: 
     exception_data = traceback.format_exc().splitlines() 
     for index, line in enumerate(exception_data): 
      if 'File' in line and os.path.basename(__file__) in line: 
       print("{} - {}".format(index, line)) 
       print("{} - {}".format(index + 1, exception_data[index + 1])) 


if __name__ == "__main__": 
    catch_it_blowup() 

retours:

1 - File "split_stacktrace.py", line 11, in check_it_blowup 
2 -  thing_that_will_blowup() 
3 - File "split_stacktrace.py", line 6, in thing_that_will_blowup 
4 -  assert False is True 

Vous aurez toujours besoin d'identifier et de tranche à partir de là.