python - 如何获取UnicodeDecodeError发生的位置?

标签 python python-3.x exception

我怎样才能知道 UnicodeDecodeError 发生的位置? 我在 here 上找到了 Material 并尝试在下面实现它。但我只是得到一个错误 NameError: name 'err' is not defined

我已经在整个互联网上和 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")

最佳答案

该信息存储在异常本身中。可以通过as关键字获取异常对象,并使用start属性:

while True:
    try:
        data = data.decode("utf-8")
    except UnicodeDecodeError as e:
        data = data[:e.start] + data[e.end:]
    else:
        break

关于python - 如何获取UnicodeDecodeError发生的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38065646/

相关文章:

python - 我可以使用 setup.py 打包需要 PyQt5 的应用程序吗?

python - 我的 PySide2 脚本中的语法错误从何而来?

java - 在覆盖方法中检查 'throws' 的异常

java - 从 java 任务抛出异常不起作用

python - 两个包使用相同的关键字

python - 根据用户输入创建循环,然后将结果保存为 Python 中的 MUD

python - 如何在 Mac 上修复 "cc: error: unrecognized command line option ' -Wshorten-64-to-3 2'"问题

python - 警告 (theano.configdefaults) : g++ not detected ! Theano 将无法执行优化的 C 实现

python - 在 Wagtail 的代码片段中使用 StreamField

java - "try-catch"或 "throws"来管理 Web 服务方法内的异常?