Как воссоздать UnicodeDecodeError для тестирования в python? - PullRequest
0 голосов
/ 17 марта 2019

Так что я просто делаю небольшой парсер csv и, работая над ним, я получил сообщение об ошибке, похожее на

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0

Я использовал

with open(<file>) as f:
    df = pandas.read_csv(f)

чтобы прочитать файл.

Мое решение состояло в том, чтобы использовать error='ignore' в качестве опции внутри функции open () (что, как я знаю, не самая лучшая практика), но недавно я хотел вернуться к ней и выполнить надлежащую обработку ошибок, используя попытку / исключение блок, чтобы поймать ошибку и распечатать сообщение, а не просто игнорировать его.

Однако я не могу воссоздать ошибку. Я использую тот же CSV-файл с той же функцией и больше не получаю ошибку декодирования ... Это явно раздражает, потому что, если это произошло случайно один раз, это может произойти снова, и я хочу правильно обработать это.

Персонаж, вызвавший проблему в прошлый раз, выглядел как дефис, но больше. CSV огромен, поэтому я не могу найти его больше. Я подумал, может быть, это конец, но когда я копирую / вставляю «конец», который я нахожу в Интернете в CSV, я все равно не получаю сообщение об ошибке.

Это может быть глупый вопрос, но как мне записать символы не-utf-8 в мой csv, чтобы воссоздать эту ошибку?

1 Ответ

0 голосов
/ 20 марта 2019

Создайте строку байтов с байтом 80 в позиции 0 и декодируйте ее с помощью UTF-8, чтобы воспроизвести ту же ошибку:

>>> s = b'\x80'
>>> s.decode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
...