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

Non UTF-8 encoded character in PyDev breaks in Debug Mode

只是想让它显示在 google 上以防其他人 运行 进入它,因为我花了 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

问题是由于注释代码中的刺字符

# text.... THORN CHARACCTER

一般问题是您实际上需要在任何具有 non-ASCII 个字符的源文件中进行编码声明——或者,如果您使用的是 3.6+,则任何具有 non-ASCII 个字符的源文件不是UTF-8.

您的源代码似乎是 Latin-1(否则刺会是两个字节 \xc3\xbe 而不是一个字节 \xfe),所以它是非法的。 (我相信你知道一个简单的答案——将你的文件保存为 UTF-8 而不是 Latin-1——还有一个更简单的答案——不要在注释中放置 non-ASCII 个字符。困难的部分是如何首先找到问题,而不是发现问题后如何解决。)

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

理想情况下,您应该在每次 运行 脚本或导入模块时收到此错误,而不仅仅是当您深入调试会话时。事实证明 Python 没有也不应该这样做是有充分理由的,但是您可能需要做更多的研究以使用最新版本的 Python 来验证它,并且它实际上并不特定于 PyDev 的调试器,然后 file a bug or raise the issue on python-dev。 (或者,如果它确实特定于 PyDev,请提交该项目的错误。)