如何捕获Python3 SocketIO错误

时间:2016-02-20 17:49:45

标签: sockets python-3.x exception-handling socket.io

我正在制作一个使用socketIO_client的简单应用。我无法弄清楚如何在连接失败时“捕获”错误。

from socketIO_client import SocketIO, LoggingNamespace
sock = SocketIO("localhost", 3000, LoggingNamespace)

当服务器离线时,控制台中会打印以下内容:

WARNING:root:localhost:3000/socket.io [waiting for connection] HTTPConnectionPool(host='localhost', port=3000): Max retries exceeded with url: /socket.io/?EIO=3&transport=polling&t=1455989769325-0 (Caused by <class 'ConnectionRefusedError'>: [Errno 111] Connection refused)

但是没有引发异常,我可以捕获并尝试创建自己的命名空间类,其中定义了on_erroron_disconnecton_event函数,但没有一个被执行。 This answer也无效。

如何“捕获”此错误,以便我能正确处理?或者,我在哪里可以找到更详细的文档?谢谢!

1 个答案:

答案 0 :(得分:1)

LoggingMixin的{​​{1}}非常明确地将异常转换为字符串并记录它;你必须继承socketIO_client并定制实现重试的循环几秒钟。如果您只是想让异常在第一次出现时冒泡(独立于超时):

来自socketIO_client导入SocketIO,LoggingNamespace import socketIO_client.logs

SocketIO

对于更复杂的行为,例如仅在超时后进行提升,需要使用更复杂的循环实现来代替透明class MySocketIO(SocketIO): def _yield_warning_screen(self, seconds=None): yield from socketIO_client.logs._yield_elapsed_time(seconds) sock = MySocketIO("localhost", 3000, LoggingNamespace)