Как захватить строку, которая является выводом print - PullRequest
0 голосов
/ 27 сентября 2018

Мотивация:

s =  诶

Это не символ ASCII, и нам нужно выдать ошибку, говорящую что-то вроде «Строка», не может быть закодировано с использованием кодировки ASCII

Но еслимы делаем что-то вроде

raise UnicodeEncodeError('The string %s cannot be encoded using the encoding 
%s',%(s, encoding))

Выше приведено сообщение об ошибке.но если мы просто обойдемся без указания какой-либо кодировки:

print(s)
诶

Я думаю, это потому, что он просто сбрасывает байты в строку.

Также что-то подобное вызовет ошибку:

print ('{}'.format(str(s)))

и ниже приведены преобразования в юникоде:

 print('%s' ,%repr(s))
 u'\u8bf6'

есть способ получить текст, который был исходным текстом в выводе ошибки.

1 Ответ

0 голосов
/ 27 сентября 2018

Я предполагаю, что это Python 2.7?

Попробуйте:

raise UnicodeEncodeError(u'The string %s cannot be encoded using the encoding 
                         %s' %(s, encoding))

Дело в том, что литерал u'...' является литералом Unicode - так что вы можете иметьсимволы Юникода в нем, без необходимости кодировать символ Юникода в ascii.

Также обратите внимание, что при применении str(s), вы конвертируете его обратно в ascii.Поэтому вместо этого сделайте следующее:

print(u'{}'.format(s))

РЕДАКТИРОВАТЬ: первый пример (UnicodeEncodeError) на самом деле не работает, как указал @StephenRauch - я оставляю его здесь после исправления синтаксической ошибки...

...