Я пытаюсь исправить библиотеку, чтобы поймать [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.
Из документации, которую вы связали, кажется, что вы должны поймать 'socket.error'. Затем проверьте, является ли атрибут '.errno'' errno.EPIPE', если это так, то это то, что вы хотите, если не повторите восстание. –
@TomDalton Спасибо за ваш намек! Я попытался поймать socket.error, но получить странное сообщение об ошибке: 'TypeError: catching классы, которые не наследуются от BaseException, не разрешены' (https://travis-ci.org/Mic92/python-mpd2/jobs/105030049). Что это значит в этом случае? – speendo
Боюсь, я затрудняюсь это объяснить. Возможно, вы захотите зарегистрировать то, что socket.error действительно перед тем, как эта ошибка произойдет, чтобы проверить, что это ожидалось. Вот пример улавливания socket.error: https://docs.python.org/3.2/library/socket.html#example, поэтому я подозрюю, что в игре есть что-то еще. Используете ли вы пакеты патчей для обезьян, которые могли бы заменить пакет сокетов python чем-то еще? –