def signal_handler(signum, frame):
raise Exception("Timeout")
def my_function():
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(1)
try:
call_long_function()
except Exception as e: # Doesn't work
print("Hello, Timeout!")
break
signal.alarm(0)
如何正确处理信号异常?此外,我试图处理超时异常,它也不起作用。
它只是打印"错误:超时"到控制台后,程序将关闭。
提前致谢。
答案 0 :(得分:1)
您可能最好将Exception子类化为您自己的Exception类:
class TimeOutException(Exception):
def __init__(self, message, errors):
super(TimeOutException, self).__init__(message)
self.errors = errors
然后你可以这样做:
def signal_handler(signum, frame):
raise TimeOutException("Timeout!")
然后,在另一个函数中:
try:
call_long_function():
except TimeOutException:
print "Got a timeout!"
break
答案 1 :(得分:1)
最好为超时异常创建一个特定的异常类,以便区分它和其他异常。
class TimeoutException(Exception):
def __init__(self, *args, **kwargs):
pass
在您的功能中定义一个警报信号,并设置一个计时器。 然后用try / except包装你的时间限制代码。 在这个例子中,我使用了两种情况 - 一种用于超时异常类 - 一种用于任何其他类型的异常,假设代码可能由于多种原因而失败。
def my_function():
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(1) # Time Limit
try:
time.sleep(120) # Simulation of code exceeding time limit
except TimeoutException:
print "Time out"
except:
print "Some other exception"
def signal_handler(signum, frame):
raise TimeoutException()
答案 2 :(得分:-4)
尝试使用以下代码段:
try:
//CODE
except Exception,e:
//handle the exception.
重点不是使用表达式Exception as e