首页 > 解决方案 > aioredis.Channel.wait_message() 抛出的异常是什么?

问题描述

我有一个如下的代码段,每次在抛出异常之前都能获得 6 条消息。但是,我无法确定引发了什么异常;我已经打印出“True outside”,所以看起来异常是在 wait_message() 中引发的,但是“except Exception as e”无法捕捉到它。有人可以帮忙吗?

        redisS  = await aioredis.create_connection(('localhost', 6379)) 
        subCh   = aioredis.Channel(self._redis, is_pattern=False)
        await redisS.execute_pubsub('subscribe', subCh)

        try:
            while await subCh.wait_message():
                try:
                    msg = await subCh.get()
                    for q in self._queues:
                        await q.put(msg)
                except:
                    print('inside')
        except aioredis.ChannelClosedError:
            print(subCh.is_active)
            print('ChannelClosedError')
        except Exception as e:
            print(subCh.is_active)
            print(e)
        except:
            print(subCh.is_active)
            print('outside')

标签: pythonpython-asyncio

解决方案


抱歉发帖,我已经得到答案了。起初,我尝试

except:
    print(sys.exc_info()[0])

然后我得到了<class 'GeneratorExit'>。所以,我终于可以通过

except GeneratorExit:
   print('caught you')

推荐阅读