Я пытаюсь написать простую программу, которая использует urllib2 с некоторой обработкой ошибок. Код выглядит нижеОшибка чтения python urllib2
try:
urllib2.Request(...)
except HTTPError as e:
self.log.debug("HTTP Error for url %s is %s" % (e.url, e.read()))
Дело в том, чтобы просто сбросить страницу ошибки в полном объеме в дополнение к e.message. Однако иногда я получаю сообщение UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 4030: ordinal not in range(128)
, которое, как я считаю, связано с тем, что e.read() принимает ascii char-набор содержимого, где, как возвращенная страница, вероятно, имеет что-то другое.
Мой вопрос: как исправить это? т. е. я хотел бы иметь «разумное» информационное сообщение, сбрасываемое. Я согласен, что это также будет зависеть от кодировки и кодировки, возвращаемой URL-адресом, к которому я пытаюсь подключиться, но если есть какой-либо способ в моем методе e.read для Python, чтобы не пытаться обеспечить символы ASCII
Если 'self.log' является ссылкой на объект стандартного каротажа, вы не должны делать интерполяцию строки, но передать вставленные в качестве параметров:' log.debug («бэ% S составляет% S», е .url, e.read()) '. Это помогает? –
Это не стандартный объект регистрации. Что делать, если я просто хотел напечатать? Извините, я не понимаю, как это поможет? –
Потому что ваш диагноз проблемы неисправен. 'e.read()' ничего не говорит о персонажах, и все равно. Это проблема с интерполяцией строк. –