[英]How to handle python signal exception?
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)
如何正确处理信号异常? 我也尝试处理超时异常,它也不起作用。
它只是在控制台上显示“错误:超时”,然后将其关闭。
提前致谢。
您最好将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
最好为超时异常创建特定的异常类,以便您可以区分超时异常和其他异常。
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()
尝试使用以下代码段:
try:
//CODE
except Exception,e:
//handle the exception.
重点不是使用表达式Exception as e
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.