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

时间:2018-03-25 04:02:07

标签: python pydev

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

python脚本运行正常,但在调试模式下,它会爆炸并且行为非常不稳定而不会进入带有刺字符的方法。

pydev调试器:启动(pid:8612) Traceback(最近一次调用最后一次):   文件" 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_module)

文件" 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_pydev_imps_pydev_execfile.py",第20行,在execfile中     contents = stream.read()

文件" C:\ Users \ Ryan \ Python3 \ env \ lib \ codecs.py",第321行,解码     (结果,消耗)= self._buffer_decode(data,self.errors,final) UnicodeDecodeError:' utf-8'编解码器不能解码位置2151中的字节0xfe:无效的起始字节

2 个答案:

答案 0 :(得分:0)

问题是由于评论代码中的刺字符

# text.... THORN CHARACCTER

答案 1 :(得分:0)

一般问题是你实际上需要在任何带有非ASCII字符的源文件中使用编码声明 - 或者,如果你在3.6以上,任何非ASCII字符的源文件都不是UTF-8。

您的源代码似乎是Latin-1(否则刺将是两个字节\xc3\xbe而不是一个字节\xfe),因此它是非法的。 (我确定你知道简单的答案 - 将你的文件保存为UTF-8而不是Latin-1 - 以及更简单的答案 - 不要在评论中放置非ASCII字符。困难的部分首先是如何找到问题,而不是在找到问题后如何解决问题。)

CPython令牌化程序的工作方式,如果它们只出现在注释中,它通常不会注意到非法字符。因此,模块可以导入正常,或者脚本可以正常执行,直到需要由于某种原因生成带有该注释的源代码行之外的字符串。我不太了解PyDev的内部结构,但据推测,PyDev正在询问该源代码行 - 除非它手动执行相同的操作。

理想情况下,每次运行脚本或导入模块时都会出现此错误,而不仅仅是在深入调试会话时。可能会发现Python没有并且不应该这样做有很好的理由,但您可能希望进行更多研究以使用最新版本的Python进行验证,并且实际上并不特定于PyDev的调试器,然后是file a bug或在python-dev上提出问题。 (或者,如果它确实特定于PyDev,请改为向该项目提交错误。)