Python: кроме EOFError: ... не работает - PullRequest
0 голосов
/ 11 марта 2011

У меня есть блок try / исключением, который отправляет сообщение и ожидает подтверждения от клиента.Если клиент завершает работу, pickle вызывает ошибку EOFError, но приведенный ниже код не улавливает ошибку и не выполняет корректное завершение работы.Вместо этого он печатает трассировку стека.Я предполагаю, что это связано со строкой «кроме socket.error, EOFError:» - я использую неправильный синтаксис для обработки там и socket.error, и EOFError?

        try:
            msgs = [1]
            self.sock.send(pickle.dumps(msgs))
            rdy = pickle.loads(self.sock.recv(2097152))
        except socket.error, EOFError: 
            print 'log socketmanager closing'
            self.terminate()
            break

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

В Python 2.x форма except a, b перехватывает исключение типа a и присваивает его переменной с именем b. В вашем случае это приведет к игнорированию EOFError. Попробуйте вместо этого:

...
except (socket.error, EOFError):
    ...

Редактировать: для разработки новый синтаксис в Python 3.0 и доступный, хотя и не обязательный, в 2.6+ для захвата значения исключения except a as b.

0 голосов
/ 11 марта 2011

break вызывает ошибку, ее можно использовать только внутри цикла for или блока try/finally, но не try/except, см. документы и подробнее .

...