繁体   English   中英

如何处理python信号异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM