【发布时间】:2015-02-06 19:58:37
【问题描述】:
如果函数调用时间过长,我正在尝试实现超时异常处理程序。
编辑:事实上,我正在使用 subprocess 编写一个 Python 脚本,它调用一个带有参数的旧 C++ 程序。我知道程序不时挂起,没有返回任何东西。这就是为什么我试图设定时间限制并继续使用不同的参数等进行下一次调用。
我一直在寻找并尝试实现它,但它并不完全奏效,所以我希望得到一些帮助。到目前为止我所拥有的是:
#! /usr/bin/env python
import signal
class TimeOutException(Exception):
def __init__(self, message, errors):
super(TimeOutException, self).__init__(message)
self.errors = errors
def signal_handler(signum, frame):
raise TimeOutException("Timeout!")
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(3)
try:
while True:
pass
except TimeOutException:
print "Timed out!"
signal.alarm(0)
EDIT:我目前收到的错误消息是“TypeError: init() 只需要 3 个参数(给定 2 个)
另外,我想问一个关于 except 块的基本问题。 “除了 TimeOutException”下面的代码和“异常处理程序”中的代码之间的角色区别是什么?似乎两者都可以做同样的事情?
任何帮助将不胜感激。
【问题讨论】:
-
你说“它不太行”。你能更具体一点吗?您是否遇到意外错误?您没有收到任何错误(包括预期的错误)吗?还有什么?
-
已更新我的答案。
-
显然,我无法将
subprocess.call与stdout=PIPE一起使用,这是我需要的:s