2 votes

Python / Tracing - Comment arrêter l'exécution d'une fonction (retour) à l'intérieur d'un traceur ?

Existe-t-il un moyen de sortir d'une fonction badfunc() en utilisant une fonction de traçage tracer(), si nous définissons sys.settrace(tracer). Je veux compter le nombre de lignes que badfunc() exécute, et sortir de cette fonction si elle s'exécute au-delà d'un nombre donné de lignes.

par exemple

def badfunc():
    while True:
      import time
      time.sleep(1)

def tracer(*args):
    counter += 1
    if counter > MAX_NUMLINES:
        return_from_badfunc()
    return tracer

sys.settrace(tracer)

Merci !

1voto

mouad Points 21520

Quelque chose comme ça, peut-être :

import sys

MAX_NUMLINES = 7
counter = 0

class TooMuchLine(Exception):
    pass

def tracer(frame, event, arg):
    global counter
    if event == "line":
        counter += 1
        print "counter", counter
        if counter > MAX_NUMLINES:
             raise TooMuchLine()

    return tracer

def badfunc():
    while True:
      import time
      time.sleep(1)

sys.settrace(tracer)

print 'start'

try:
   badfunc()
except TooMuchLine:
   print 'stopped'

print 'done'

Sortie :

start
counter 1
counter 2
counter 3
counter 4
counter 5
counter 6
counter 7
counter 8
stopped
done

N.B : J'espère que vous avez déjà lu cette avant de jouer avec sys.settracer :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X