UnicodeDecodeError:' utf-8'编解码器无法解码字节:但我不知道代码中的哪个位置

时间:2017-12-15 17:20:03

标签: python spyder

我在spyder 中运行一个python代码,它不会打印任何内容并且不管理任何字符串。但我当然在我的代码中有评论(其中我可能在某处有重音)。

当我想运行代码时,它会告诉我:

  

UnicodeDecodeError:' utf-8'编解码器不能解码位置148中的字节0xe9:无效的连续字节

我遇到的问题是我只是不知道它崩溃了哪一行,实际上错误给了我anaconda python文件中的行,它并没有告诉我我的错误在我自己的代码中的哪个位置

事实上,更好的是,代码运作良好。然后我的电脑崩溃,我重新启动它,现在我有这个错误,但我的代码之间没有任何改变。

关于这个主题的所有帮助总是涉及具有一些奇怪字符的字符串,但我坚持认为我的代码没有打印任何东西而且我不管理任何字符串(只有数字矩阵)这一事实。

代码很长,我很难确切地确定它失败的地方,我想首先知道是否有人对它有一个大概的想法(主要的事实是我不能使用我的任何字符串)代码,可能在这里的唯一特殊字符将在评论中)

1 个答案:

答案 0 :(得分:1)

似乎错误可能在您的源代码本身中。错误消息对于指出错误的确切位置并不十分有用。此代码片段(在Python 3中)可用于打印出包含错误的行。

error_position = 148
file_position = 0
with open(source_filename, 'r', encoding='latin1') as f:
    for line in f:
        if file_position <= error_position < file_position + len(line):
            print(line.rstrip('\n').encode('latin1').decode('unicode-escape'))
            spaces = ' ' * (error_position - file_position)
            print(spaces, '^', sep='')
            break
        file_position += len(line)

如果源文件使用的是非默认字符,则需要告诉Python使用哪种编码。 Python 2的默认值是ASCII,Python 3的默认值是UTF-8。对于其他任何事情,您可以在源文件的第一行或第二行添加魔术注释,例如:

# -*- coding: windows-1252 -*-

有关详细信息,请参阅PEP 263

至于为什么你的程序在你重新启动之前没有错误,我有一个理论。如果您正在使用交互式Python提示并使用import加载程序,即使您保存文件并再次使用import,也不会看到对程序的任何更新。那是因为Python缓存导入;见How to unimport a python module which is already imported?