Python PyDev中的非UTF-8编码字符在调试模式下中断

Python PyDev中的非UTF-8编码字符在调试模式下中断,python,pydev,Python,Pydev,我只是想在谷歌上展示这一点,以防其他人遇到它,因为我花了8个小时卸载并重新安装,以使其正常工作 python脚本可以正常运行,但在调试模式下,如果不使用thorn字符进入方法,它将崩溃并表现得非常不稳定 pydev debugger: starting (pid: 8612) Traceback (most recent call last): File "C:\Users\RH1832\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614

我只是想在谷歌上展示这一点,以防其他人遇到它,因为我花了8个小时卸载并重新安装,以使其正常工作

python脚本可以正常运行,但在调试模式下,如果不使用thorn字符进入方法,它将崩溃并表现得非常不稳定

pydev debugger: starting (pid: 8612)
Traceback (most recent call last):
  File "C:\Users\RH1832\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\pydevd.py", line 1621, in <module>
    main()

File "C:\Users\Ryan\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\pydevd.py", line 1615, in main
    globals = debugger.run(setup['file'], None, None, is_module)

File "C:\Users\Ryan\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\pydevd.py", line 1022, in run
    pydev_imports.execfile(file, globals, locals)  
 execute the script
File "C:\Users\Ryan\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\_pydev_imps\_pydev_execfile.py", line 20, in execfile
    contents = stream.read()

File "C:\Users\Ryan\Python3\env\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfe in position 2151: invalid start byte
pydev调试器:正在启动(pid:8612) 回溯(最近一次呼叫最后一次): 文件“C:\Users\RH1832\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\pydevd.py”,第1621行,在 main() 文件“C:\Users\Ryan\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\pydevd.py”,第1615行,主目录 globals=debugger.run(setup['file'],None,None,is_模块) 文件“C:\Users\Ryan\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\pydevd.py”,第1022行,正在运行 pydev_imports.execfile(文件、全局、局部) 执行脚本 文件“C:\Users\Ryan\.p2\pool\plugins\org.python.pydev_6.2.0.201711281614\pysrc\\u pydev_imps\\u pydev_execfile.py”,第20行,在execfile中 contents=stream.read() 文件“C:\Users\Ryan\Python3\env\lib\codecs.py”,第321行,解码中 (结果,消耗)=自身缓冲区解码(数据,自身错误,最终) UnicodeDecodeError:“utf-8”编解码器无法解码位置2151中的字节0xfe:无效的开始字节
问题是由于注释代码中的thorn字符造成的


#文本。。。。THORN Character

一般的问题是,在任何具有非ASCII字符的源文件中,或者在3.6+中,在任何具有非UTF-8的非ASCII字符的源文件中,实际上都需要一个编码声明

您的源代码似乎是拉丁语-1(否则刺将是两个字节的
\xc3\xbe
,而不是一个字节的
\xfe
),因此它是非法的。(我相信你知道最简单的答案是将文件保存为UTF-8而不是拉丁语-1,更简单的答案是不要在注释中添加非ASCII字符。困难的部分是如何首先找到问题,而不是找到问题后如何解决。)

按照CPython标记器的工作方式,如果非法字符只出现在注释中,它通常不会注意到它们。因此,模块可以很好地导入,或者脚本可以很好地执行,直到出于某种原因需要在源代码行中生成一个带有注释的字符串。我不太了解PyDev的内部结构,但可以推测,PyDev要求使用该源代码行,除非它手动执行等效操作

理想情况下,您应该在每次运行脚本或导入模块时都会出现此错误,而不仅仅是在调试会话的深处。可能有一个很好的理由表明Python不这样做,也不应该这样做,但是您可能想做更多的研究,用最新版本的Python验证它,并且它实际上不是PyDev的调试器所特有的,然后或者在上提出这个问题。(或者,如果它确实是特定于PyDev的,则将一个bug提交给该项目。)