Python / 跟踪 - 如何在追踪器中停止函数执行(从中返回)
有没有办法通过一个叫做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 之前,已经阅读过 这个链接 :)