Python 如何获取发生UnicodeDecodeError的位置?
我如何知道UnicodeDecodeError发生在哪里? 我发现材料已过,并试图在下面实施它。但是我刚刚得到一个错误Python 如何获取发生UnicodeDecodeError的位置?,python,python-3.x,exception,exception-handling,Python,Python 3.x,Exception,Exception Handling,我如何知道UnicodeDecodeError发生在哪里? 我发现材料已过,并试图在下面实施它。但是我刚刚得到一个错误namererror:name'err'没有定义 我在StackOverflow上搜索了整个互联网,但找不到任何关于如何使用它的提示。在python文档中,它说这个特殊的异常具有start属性,所以它必须是可能的 多谢各位 data = buffer + data try: data = data.decode("utf-8") excep
namererror:name'err'没有定义
我在StackOverflow上搜索了整个互联网,但找不到任何关于如何使用它的提示。在python文档中,它说这个特殊的异常具有start属性,所以它必须是可能的
多谢各位
data = buffer + data
try:
data = data.decode("utf-8")
except UnicodeDecodeError:
#identify where did the error occure?
#chunk that piece off -> copy troubled piece into buffer and
#decode the good one -> then go back, receive the next chunk of
#data and concatenate it to the buffer.
buffer = err.data[err.start:]
data = data[0:err.start]
data = data.decode("utf-8")
该信息存储在异常本身中。您可以使用
作为
关键字获取异常对象,并使用开始
属性:
while True:
try:
data = data.decode("utf-8")
except UnicodeDecodeError as e:
data = data[:e.start] + data[e.end:]
else:
break
如果您只想忽略错误并解码其余错误,您可以执行以下操作:
data = data.decode("utf-8", errors='ignore')
投票决定以微不足道的方式结束,因为答案是一个重要的语法细节。可能对将来的参考仍然有用。这很简单。非常感谢:)在文档中他们说:“例如,err.object[err.start:err.end]给出了编解码器失败的特定无效输入。”这是什么意思:err.object[err.start:err.end]?这和e.start不一样,甚至不接近。@Cooper:接得好!我应该编辑我的答案。事实上,很接近。这是一个很好的例子。这意味着在位置
err.start
和err.end
之间获取所有字符。这包括err.start
,但不包括err.end
。在大多数情况下,结束仅在开始后一个字符,因此我的解决方案将起作用。然而,我相信在某些情况下,err.end
比err.object高出一个以上。在err.object中,object实际上是某个属性。明白了,谢谢:)