如果我们设置 sys.settrace(tracer),是否有一种方法可以使用跟踪函数 tracer() 从函数 badfunc() 返回。我想计算 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)
谢谢!
可能是这样的:
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
注意:我希望你已经阅读了 this在玩 sys.settracer 之前 :)
我是一名优秀的程序员,十分优秀!