2016-01-18 5 views
3

Я пытаюсь исправить библиотеку, чтобы поймать [Errno 32] Broken pipe.Какое исключение Python 3.2 бросает в случае [Errno 32] Broken pipe

Библиотека кодируется для работы в Python 2 и Python 3. В Python 2 исключением является

socket.error: [Errno 32] Broken pipe 

в Python> = 3.3 это

BrokenPipeError: [Errno 32] Broken pipe 

В Python 3.2 там нет BrokenPipeError. Существует socket.error, но у него есть quite a different description чем in Python 2.

У меня установлен Debian Stretch на моей системе, поэтому сложно установить Python 3.2 для проверки, какое исключение я должен был бы поймать в этой версии. Тем не менее, я не хочу разбивать библиотеку на Python 3.2.

Поэтому было бы очень полезно, если бы вы могли сказать мне, что является наиболее конкретным исключением, чтобы поймать ошибку разбитого трубопровода в Python 3.2.

+1

Из документации, которую вы связали, кажется, что вы должны поймать 'socket.error'. Затем проверьте, является ли атрибут '.errno'' errno.EPIPE', если это так, то это то, что вы хотите, если не повторите восстание. –

+0

@TomDalton Спасибо за ваш намек! Я попытался поймать socket.error, но получить странное сообщение об ошибке: 'TypeError: catching классы, которые не наследуются от BaseException, не разрешены' (https://travis-ci.org/Mic92/python-mpd2/jobs/105030049). Что это значит в этом случае? – speendo

+1

Боюсь, я затрудняюсь это объяснить. Возможно, вы захотите зарегистрировать то, что socket.error действительно перед тем, как эта ошибка произойдет, чтобы проверить, что это ожидалось. Вот пример улавливания socket.error: https://docs.python.org/3.2/library/socket.html#example, поэтому я подозрюю, что в игре есть что-то еще. Используете ли вы пакеты патчей для обезьян, которые могли бы заменить пакет сокетов python чем-то еще? –

ответ

1

Из документации, которую вы связываете, кажется, что вы должны поймать socket.error. Затем проверьте, является ли атрибут .errno errno.EPIPE, если это так, то это то, что вы хотите, если не затем повторно поднять исключение.

Последующая ошибка, которую вы связали с https://travis-ci.org/Mic92/python-mpd2/jobs/105030049, выглядит так, как будто это вызвано тестовым файлом https://github.com/Mic92/python-mpd2/blob/master/test.py#L42, издевающимся над всем пакетом сокета (включая socket.error). С очень быстро Посмотрите на код, возможно, вам будет только издеваться socket.socket, а остальное как есть.

+0

Спасибо! Это не моя библиотека, ни мой тестовый файл. Я просто пытаюсь исправить там проблему. Я посмотрю на это в ближайшие дни. Большое спасибо! – speendo