Python / 跟踪 - 如何在追踪器中停止函数执行(从中返回)

2 投票
1 回答
3347 浏览
提问于 2025-04-16 09:49

有没有办法通过一个叫做tracer的函数来退出badfunc()这个函数呢?如果我们设置了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

也许可以这样做:

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

注意:我希望你在尝试使用 sys.settracer 之前,已经阅读过 这个链接 :)

撰写回答