我是Python新手,希望有人能向我解释错误消息的含义。
具体来说,我有一些将Python和SPSS组合在一起的代码保存在Atom中,Atom是由以前的同事创建的。既然以前的同事不在了,我现在就要运行代码了。我做的是从SPSS22中运行下面的代码。
begin program.
import spss,spssaux,imp
abcvalid = imp.load_source('abcvalid', "I:/VALIDITY CHECK/Python Library/2016/abcvalid2016.py")
import abcvalid
abcvalid.fullprocess("9_26_2016","M:/Users/Yli\2016 SURVEY/DOWNLOADS/9_26_2016/","M:/Users/Yli/2016 SURVEY/Legacy15.sav")
end program.
然后我从输出中得到以下信息。
Traceback (most recent call last):
File "<string>", line 5, in <module>
File "I:/VALIDITY CHECK/Python Library/2016/abcnvalid2016.py", line 2067, in fullprocess
dataprep(date,filepath,legacypath)
File "I:/VALIDITY CHECK/Python Library/2016/abcvalid2016.py", line 2006, in dataprep
emailslower(date,filepath)
File "I:/VALIDITY CHECK/Python Library/2016/abcvalid2016.py", line 1635, in emailslower
dataset ACTIVATE comment_data.""".format(date,filepath))
File "C:\PROGRA~1\IBM\SPSS\STATIS~1\22\Python\Lib\site-packages\spss\spss.py", line 1494, in Submit
cmdList = spssutil.CheckStr(cmdList)
File "C:\PROGRA~1\IBM\SPSS\STATIS~1\22\Python\Lib\site-packages\spss\spssutil.py", line 166, in CheckStr
s1 = unicode(mystr,locale.getlocale(locale.LC_CTYPE)[1])
File "C:\Program Files\IBM\SPSS\Statistics\22\Python\lib\encodings\cp1252.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 55: character maps to <undefined>
我知道这个网站上也有类似的问题,但是这些问题和答案太难让我理解了。如果有人能帮我,我会非常感激的!
提前谢谢你!
很难确定这里发生了什么,因为有很多代码处于关闭阶段,但是错误消息告诉您输入流中有一个无效字符。代码x81在代码页1252中未定义,这是有效的代码页。这是西欧/美国的默认代码页。程序正在尝试将假定的代码页字符串转换为Unicode,因此失败。
我的猜测是输入实际上不是用cp 1252编码的。在统计信息当前代码页或Unicode模式中出现问题。您可能需要将SPSS统计区域设置设置为其他设置,或者打开或关闭Unicode模式。有关如何执行此操作,请参见“命令语法参考”中的“设置语言环境和设置UNICODE”。
如果您可以详细介绍您的语言环境和代码的用途,我们可能可以提供更多信息。
首先,下面是一个在Windows上重现错误的最小示例:
据我所知,问题是这样的(我整理了一些我发现的信息和例子,但并不确定每件事都是正确的。我欢迎更正。)
ü
字符是Unicode中的代码点252=0xfc,https://unicode-table.com/en/00FC/)。ü
字符传递到控制台,您可以使用此示例进行测试(请确保将文件保存为UTF-8):我不知道为什么一开始就这样。(这个答案可能是原因:https://stackoverflow.com/a/32176732/880783)
ü
字符位于位置129=0x81(听起来很熟悉?)。关键是让Python了解如何对它从流程中获得的内容进行编码。在我的示例(Windows控制台)中,我尝试了以下几种编码(请参见list here):
'ascii'
失败,出现ordinal not in range(128)
错误(可能不包括扩展的ASCII)。'cp1252'
失败,出现character maps to <undefined>
'latin_1'
可以工作,但在VS代码中的调试控制台上输出一个方框字符(``)。'cp850'
似乎可以工作,输出一个ü
字符。所以我现在就坚持
'cp850'
,看看进展如何。相关问题 更多 >
编程相关推荐