2016-03-16 1 views
0

Je vais avoir la question suivante:Comment ignorer les points d'arrêt de type pdb suivants, y compris les appels set_trace()?

J'ai le code très semblable à ce qui suit

def my_function(): 
    import pdb; pdb.set_trace() 
    .... 

Au cours de l'exécution, ma fonction est appelée beaucoup de fois. Je suis intéressé par l'inspection de l'exécution du code la première fois que cette fonction est appelée.

Si j'ai fini d'inspecter, je voudrais appuyer sur c, et reprendre l'exécution normale du programme, sans m'arrêter à ce point de rupture la prochaine fois que cette fonction sera appelée.

Existe-t-il un moyen de le faire? Ou dois-je faire quelque chose de complètement différent, comme mettre le set_trace() appel un endroit qui est seulement appelé une fois, et puis une fois le point d'arrêt est frappé, en utilisant une commande comme tbreak my_function, pour définir un point d'arrêt ponctuel là?

Répondre

2

Vous pouvez essayer de définir un attribut de la fonction la première fois qu'il est exécuté. Quelque chose comme:

def my_function(): 
    if not hasattr(my_function,'first_time'): 
     my_function.first_time = 1 # Dummy value 
     import pdb; pdb.set_trace() 
    ... 

L'attribut first_time persistera entre les appels de fonction et la première fois que la fonction est appelée, il sera créé. Chaque fois que la fonction est appelée, elle existera déjà et le code de l'instruction if ne sera pas exécuté. Cette solution repose sur le fait que votre fonction n'est pas une méthode dans une classe car les méthodes de classe ne peuvent pas avoir d'attributs, étant donné qu'elles sont déjà des attributs de la classe. Juste comme une note, je ne suis pas sûr si vous avez l'importation dans votre code actuel, mais les meilleures pratiques de codage indiquent que vous devriez mettre les importations seulement au début de votre code, pas dans les fonctions comme vous l'avez.

+0

haha, ok, j'aime ce hack innocent :) Je vais l'utiliser totalement. –