【发布时间】:2014-07-14 16:22:48
【问题描述】:
我有一个需要逐行查看的日志文件,显然它包含一些“坏字节”。我收到一条错误消息,内容如下:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 9: invalid start byte
我已经能够将问题简化为包含以下行的文件“log.test”:
Message: \260
(至少它在我的 Emacs 中是这样显示的。)
我有一个文件“demo_error.py”,看起来像这样:
import sys
with open(sys.argv[1], 'r') as lf:
for i, l in enumerate(lf):
print(i, l.strip())
然后我从命令行运行:
$ python3 demo_error.py log.test
完整的回溯是:
Traceback (most recent call last):
File "demo_error.py", line 5, in <module>
for i, l in enumerate(lf):
File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/codecs.py", line 313, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 13: invalid start byte
我的直觉是我必须以某种方式指定一个更通用的编解码器(例如“原始 ascii”) - 但我不太确定如何做到这一点。
请注意,这在 Python 2.7 中并不是真正的问题。
为了明确我的观点:我不介意为有问题的行获得例外 - 然后我可以简单地丢弃该行。问题是异常似乎发生在“for”循环本身,这使得对该特定行的特殊处理变得不可能。
【问题讨论】:
标签: python python-3.x