2015-10-21 63 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。

相關問題