2015-10-21 66 views
3

嗨,我的问题是以下,我不明白为什么有时我不能赶上我的flash_serial_buffer方法中的TimeOutError超时错误未被捕获

当运行我的程序时,我有时会得到一个没有被捕获的TimeOutError,我不明白为什么。我指出了信号处理程序的代码以及没有捕获到TimeOutError的方法。有没有人有任何想法,这可能会发生?

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

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

signal.signal(signal.SIGALRM, signal_handler) 

冲洗串行缓冲器块,如果没有答案

答案= 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 

UPDATE:

我能够再次重复错误,我真的不明白为什么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 
+2

是否因为例外被称为['TimeoutException'](https://github.com/thom-nic/python-xbee/blob/master/xbee/base.py#L24)? – wflynny

+0

我仔细看了一下你说的@wflynny,不应该让TimeoutException被捕获到Xbee模块中? – LPS

+0

@wflynny我正在导入Xbee模块。我所说的TimedOutError类是由我在自己的模块中定义的,这是我没有理解的例外。我正在等待能够重复错误将其粘贴到此处。 – LPS

回答

0

我想在这种情况下更换尝试,除了码推荐这个

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:你并不需要包括尝试(无论错误)在尝试,除了statments。

相关问题