我正在评估可能需要过多时间的表达式。我想设置一个超时,例如:
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中完成上述工作?