2011-01-12 4 views
2

Gibt es eine Möglichkeit, aus einer Funktion Badfunc() mit einem Tracer-Funktion Tracer(), wenn wir sys.settrace setzen (Tracer). Ich möchte die Anzahl der Zeilen zählen, die badfunc() ausführt, und sie wieder ausgeben, wenn sie mehr als eine bestimmte Anzahl von Zeilen ausführt.Python/Tracing - Wie die Ausführung einer Funktion (Rückkehr von ihr) aus einem Tracer zu stoppen

z:

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) 

Dank!

Antwort

1

So etwas wie diese vielleicht:

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' 

Ausgang:

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

N. B: Ich hoffe, dass Sie bereits this mit sys.settracer vor dem Spiel lesen :)

+0

w00t! Danke für das und das :) – Anonymous

+0

@ user572527: Froh, dass es hilft :) – mouad

Verwandte Themen