没有捕获超时错误

时间:2015-10-21 21:34:51

标签: python try-catch

您好我的问题如下,我无法理解为什么有时候我无法抓住TimeOutError方法中的flash_serial_buffer

在运行我的程序时,我有时会得到一个未被捕获的TimeOutError,我无法理解为什么。我指出了信号处理程序的代码以及未捕获TimeOutError的方法。有没有人知道这可能会发生?

这是我的信号处理程序定义和回调函数的代码。 基本上,如果时间结束,则调用信号处理程序并引发超时错误。

def signal_handler(signum, frame):
    print "PUM"
    raise TimedOutError("Time out Error")

signal.signal(signal.SIGALRM, signal_handler)

如果没有

的答案,则刷新串行缓冲区会阻塞
  

answer = xbee.wait_read_frame()

想法是清除缓冲区中的所有内容,直到没有更多消息为止。当没有更多消息时,它只是等待SIGALRM爆炸并引发超时错误。

def flush_serial_buffer(xbee):

    #Flush coordinators serial buffer if problem happened before
    logging.info("     Flashing serial buffer")
    try:
        signal.alarm(1)  # seconds
        while True:
            answer = xbee.wait_read_frame()
            signal.alarm(1)
            logging.error("    Mixed messages in buffer")
    except TimedOutError:
        signal.alarm(0)  # seconds
        logging.error("    No more messages in buffer")

    signal.alarm(0) #Supposedly never leaves without using Except but...

任何人都可以看到TimeOutError可能被引发但未被try:声明捕获的情况吗?

我忘了把我的错误类定义放在这里:

class TimedOutError(Exception):
pass

更新:

我能够再次重复错误,我真的无法理解为什么try没有发现错误。

INFO:root:     Flashing serial buffer
PUM
Traceback (most recent call last):
  File "/home/ls/bin/pycharm-community-4.0.6/helpers/pydev/pydevd.py", line 1458, in trace_dispatch
    if self._finishDebuggingSession and not self._terminationEventSent:
  File "/home/ls/PiProjects/Deployeth/HW-RPI-API/devices.py", line 42, in signal_handler
    raise TimedOutError("Time out Error")
TimedOutError: Time out Error  

1 个答案:

答案 0 :(得分:0)

我建议在这种情况下将try和except代码替换为此

    try:
        signal.alarm(1)  # seconds
        while True:
            answer = xbee.wait_read_frame()
            signal.alarm(1)
            logging.error("    Mixed messages in buffer")
    except:
        signal.alarm(0)  # seconds
        logging.error("    No more messages in buffer")

Ps:你不需要在你的尝试中包括尝试(无论错误),除了你的判断。