您好我的问题如下,我无法理解为什么有时候我无法抓住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
答案 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:你不需要在你的尝试中包括尝试(无论错误),除了你的判断。