gpt4 book ai didi

python - 此超时错误 ('TimeOutError' ) 未被捕获

转载 作者:行者123 更新时间:2023-11-28 19:16:07 26 4
gpt4 key购买 nike

我不明白为什么有时我无法在我的 flash_serial_buffer 方法中捕捉到 TimeOutError

当运行我的程序时,我有时会收到一个未被捕获的 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 it 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

最佳答案

在这种情况下,我建议用以下代码替换 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:您不需要在 try 和 except 语句中包含 try(无论发生什么错误)。

关于python - 此超时错误 ('TimeOutError' ) 未被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33269688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com