以下代码在Windows 7中正常工作:
[30] delim = b'\xc3\xbe'.decode() # 'þ'
[31] reader = csv.reader(my_file, delimiter=delim)
然而,在我的ec2实例上使用python 3.4在Amazon Linux上失败,抛出错误:
SyntaxError:文件中以'\ xfe'开头的非UTF-8代码 第30行的data_loader.py,但没有声明编码;看到 http://python.org/dev/peps/pep-0263/了解详情
我是从linux shell运行的,即:
python3 data_loader.py
然而,当我在ec2 linux服务器上使用Python 3.4命令行时,我得到了预期的结果:
>>> b'\xc3\xbe'.decode()
'þ'
我尝试将delim设置为很多东西,包括:
delim = '\xfe'
但我得到同样的错误。
任何人都可以帮我弄清楚发生了什么事吗?就像我说的,代码在Python 3.4,Windows 7上运行良好。
谢谢!
答案 0 :(得分:2)
错误是由第30行的注释中包含非ascii字符引起的。
根据python本身链接到的PEP article:
本PEP建议引入一种语法来声明编码 一个Python源文件。然后,编码信息被使用 Python解析器使用给定的编码来解释文件。最 值得注意的是,这增强了对Unicode文字的解释 源代码,可以编写Unicode文字 使用例如UTF-8直接在Unicode识别编辑器中。
...
如果没有其他的话,Python将默认为ASCII标准编码 给出了编码提示。
要修复错误,您可以从第30行删除注释,也可以指定python解释器用于正确读取注释的文件编码。
例如,如果在创建源文件时使用latin-1编码来添加'þ'
字符,则将此行添加到python脚本的顶部:
# coding=latin-1
用文件的实际编码替换编码,你应该好好去。