Кроме ошибок кодека Python? - PullRequest
       59

Кроме ошибок кодека Python?

3 голосов
/ 29 декабря 2010
File "/usr/lib/python3.1/codecs.py", line 300, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 805: invalid start byte

Привет, я получил это исключение. Как мне его поймать и продолжить чтение моих файлов, когда я получу это исключение.

В моей программе есть цикл, который построчно читает текстовый файл и пытается выполнить некоторую обработку. Однако некоторые файлы, с которыми я сталкиваюсь, могут не быть текстовыми файлами или иметь строки, которые не отформатированы должным образом (иностранный язык и т. Д.). Я хочу игнорировать эти строки.

Следующее не работает

for line in sys.stdin:
   if line != "":
      try:
         matched = re.match(searchstuff, line, re.IGNORECASE)
         print (matched)
      except UnicodeDecodeError, UnicodeEncodeError:
         continue

1 Ответ

6 голосов
/ 29 декабря 2010

Посмотрите на http://docs.python.org/py3k/library/codecs.html. Когда вы открываете поток кодеков, вы, вероятно, захотите использовать дополнительный аргумент errors='ignore'

В Python 3 sys.stdin по умолчанию открывается как текстовый поток(см. http://docs.python.org/py3k/library/sys.html), и имеет строгую проверку ошибок.

Вам необходимо повторно открыть его как устойчивый к ошибкам поток utf-8. Примерно так будет работать:

sys.stdin = codecs.getreader('utf8')(sys.stdin.detach(), errors='ignore')
...