Python3与Python2信号SIGALRM处理差异

时间:2017-05-21 23:43:15

标签: python-2.7 python-3.x exception timeout signals

我正在评估可能需要过多时间的表达式。我想设置一个超时,例如:

def handler(signum, frame):                                                                     
    print("handler called")                                                                     
    raise Exception("timed out")                                                                                                                                       

def eval_wrapped(expr, timeout=1):                                                              
    signal.signal(signal.SIGALRM, handler)                                                      
    signal.alarm(timeout)                                                                       
    eval(expr)                                                                                  
    signal.alarm(0)                                                                             
    return None                                                                                 

运行

> eval_wrapped("9999**9999**9999")

在:

Python2:抛出预期的异常

Python3:仅打印"处理程序调用",不会抛出异常

这里有什么?如何在Python3中完成上述工作?

0 个答案:

没有答案