我正在制作一个使用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_error
,on_disconnect
和on_event
函数,但没有一个被执行。 This answer也无效。
如何“捕获”此错误,以便我能正确处理?或者,我在哪里可以找到更详细的文档?谢谢!
答案 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)
。