Я только что переписал что-то похожее на базовый сервер python (https://docs.python.org/3/library/socketserver.html), потому что я думал, что мне нужно.Python3 - выход из блока try-all try
Мое вопрос, я?
То, что я хотел сделать, - это выйти из обработчика и из цикла сервера, если получен определенный запрос (если требуется, запрос на остановку сервера). Первоначально я попытался вырваться из цикла сервера, выбросив исключение, но получается, что обработчики socketserver запущены внутри блока «try catch all all», что означает, что исключения, брошенные внутри обработчика, выиграли 'никогда не распространяются за пределы функции вызова обработчика (той, которая содержит блок исключения catch-all).
Так что у python есть механизм longjump, который может пробивать блок try-catch_all-expect или я могу запустить serve_forever_loop внутри потока, а затем из обработчика сделать что-то вроде Thread.current.kill()
(как я могу это сделать?).
Почему вы не можете подклассы и предоставлять свой собственный 'handle_error'? –
@JohnLaRooy Класс BaseServer не передает ошибку handle_error, просто запрос (уже прочитанный) и client_address https://hg.python.org/cpython/file/3.4/Lib/socketserver.py. Мне нужно было бы вырваться из цикла на определенный тип ошибки (мой пользовательский тип). – PSkocik