Python 未捕获超时错误

Python 未捕获超时错误,python,try-catch,Python,Try Catch,您好,我的问题如下,我无法理解为什么有时我无法在我的flash\u serial\u buffer方法中捕获TimeOutError 在运行我的程序时,我有时会得到一个未被捕获的TimeOutError,我无法理解为什么。我指出信号处理程序的代码以及未捕获TimeOutError的方法。有人知道这会发生吗 这是我的信号处理程序定义和回调函数的代码。 基本上,如果时间结束,将调用信号处理程序并引发超时错误 def signal_handler(signum, frame): print "

您好,我的问题如下,我无法理解为什么有时我无法在我的
flash\u serial\u buffer
方法中捕获
TimeOutError

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

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

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

signal.signal(signal.SIGALRM, signal_handler)
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...
如果没有应答,则刷新串行缓冲块

答案=xbee.wait\u read\u frame()

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

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

signal.signal(signal.SIGALRM, signal_handler)
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  

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

    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和exception语句中包含try(无论是什么错误)。

是因为调用了异常吗?我仔细查看了您所说的@wflynny,TimeoutException不应该在Xbee模块中被捕获吗?@wflynny我正在导入Xbee模块。我所说的TimeDoutror类是由我在自己的模块中定义的,这是我没有提到的例外。我正在等待能够重复错误并将其粘贴到此处。编辑之前(现在仍然)您的问题很难解释,因为在文本中您声称错误为
TimeOutError
,但在代码中我只看到
timedoutror
(带d)。最初,这个问题是这样写的,不清楚异常是在哪里定义的——假设您在xbee import*@wflynny中执行了类似于
的操作是完全合理的。您认为我应该使用xbee模块中的
TimeOutException
而不是使用我自己的带有
TimeDoutror
的报警来解决读取时的非阻塞问题吗,问题