2016-02-20 4 views
0

Я делаю простое приложение, которое использует socketIO_client. Я не могу понять, как «поймать» ошибку при сбое соединения.Как поймать Python3 Ошибка SocketIO

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 тоже не работал.

Как я могу «поймать» эту ошибку, чтобы я мог справиться с ней должным образом? В качестве альтернативы, где я могу найти более подробную документацию? Благодаря!

ответ

1

LoggingMixin of socketIO_client очень явно превращает исключение в строку и регистрирует его; вам потребуется подкласс SocketIO и настроить цикл, который реализует повторную попытку в течение нескольких секунд. Если вы просто хотите, чтобы пузырек исключение составляют первый раз это происходит (независимо от времени ожидания):

из socketIO_client импорта SocketIO, LoggingNamespace импорт socketIO_client.logs

class MySocketIO(SocketIO): 

    def _yield_warning_screen(self, seconds=None): 
     yield from socketIO_client.logs._yield_elapsed_time(seconds) 

sock = MySocketIO("localhost", 3000, LoggingNamespace) 

Для более сложного поведения как повышение только после тайминга, требуется более сложная реализация цикла вместо прозрачного yield from.

Смежные вопросы