Skip to main content
 首页 » 编程设计

Python/Tracing之如何从跟踪器中停止函数的执行(从中返回)

2025年05月04日9kenshinobiy

如果我们设置 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 之前 :)