Python / Tracing - Как остановить выполнение функции (возврат из нее) из трассировщика - PullRequest
2 голосов
/ 12 января 2011

Есть ли способ выхода из функции badfunc () с помощью функции tracer tracer (), если мы установили sys.settrace (tracer). Я хочу подсчитать количество строк, которые выполняет badfunc (), и вернуться из него, если он выполняет больше заданного количества строк.

например:

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)

Спасибо!

1 Ответ

1 голос
/ 12 января 2011

Нечто подобное может быть:

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'

Выход:

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

N.B .: Я надеюсь, что вы уже прочитали это , прежде чем играть с sys.settracer

...