错误:不支持的操作数类型PsychoPy

时间:2015-12-17 14:27:43

标签: numpy python-unicode psychopy

我坚持以下问题: 我在Windows中设计了一个PsychoPy实验,版本1.82.01。它在那里完美运行。

现在我已经在1.83.01版本的MacBook Air上复制了相同的实验。

从那时起,实验开始了,但过了一段时间,我收到以下错误消息

#Running:  
/Users/Kataha/Desktop/Experiment/Experiment_FFOV_Kinder3_lastrun.py #
2015-12-05 15:26:39.876 python[1314:117629]
ApplePersistenceIgnoreState: Existing state will not be touched. 
New state will be written to /var/folders/c8/
qy0wd2ws3r115rg30wxxg6940000gn/T/org.psychopy.PsychoPy2.savedState
Traceback (most recent call last):
File
"/Users/Kataha/Desktop/Experiment/Experiment_FFOV_Kinder3_lastrun.py",
line 389, in <module>
if Fix_kreuz.status == STARTED and t >= (0.0 + (SOA-win.monitorFramePeriod*0.75)): 
#most of one frame period left

TypeError: unsupported operand type(s) for -: 'unicode' and 'numpy.float64'

第389行中的代码如下所示:

# *Fix_kreuz* updates
    if t >= 0.0 and Fix_kreuz.status == NOT_STARTED:
        # keep track of start time/frame for later
        Fix_kreuz.tStart = t  # underestimates by a little under one frame
        Fix_kreuz.frameNStart = frameN  # exact frame index
        Fix_kreuz.setAutoDraw(True)
    if Fix_kreuz.status == STARTED and t >= (0.0 + (SOA-win.monitorFramePeriod*0.75)): #most of one frame period left
        Fix_kreuz.setAutoDraw(False)

变量SOA在excel表中定义: Excel Sheet with variables

我无法弄清楚,问题是什么。我希望有一个人可以帮助我。谢谢!

2 个答案:

答案 0 :(得分:1)

显然,变量SOA包含一个unicode值:

... SOA-win.monitorFramePeriod ...

unsupported operand type(s) for -: 'unicode' and 'numpy.float64' 

您没有显示定义SOA的位置。你可以在整个项目中展示这个,或者某个地方吗?要验证确切类型,您可以添加以下行:

print "SOA=", SOA, typeof(SOA)
print "monitorFramePeriod=", win.monitorFramePeriod, typeof(SOAwin.monitorFramePeriod)
行前

if Fix_kreuz.status == STARTED ...

可能有一个可能的解决办法,但这是一个疯狂的猜测:

if Fix_kreuz.status == STARTED and t >= (0.0 + (float(SOA)-win.monitorFramePeriod*0.75)): 

答案 1 :(得分:1)

在Excel文件中,请注意在SOA列中,“0.5”值是左对齐的,而“3”值是右对齐的。在Excel中,左对齐单元格表示这些是文本值而不是数字。比较前两列,它们都是文本(并且都是左对齐),最后一列是全数字(并且都是右对齐的)。

您可以尝试将此文件导出为.csv而不是原生.xlsx。如果这些实际上是数值,那么PsychoPy会将该列读取为数字。但您应该确定是什么让Excel将该列中的条目视为文本。无法从字体中分辨出来,但有时候造成这种情况的原因是输入“哦点五”而不是“零点五”。

这与@ Michiel的答案一致,即unicode(即文本)值正在污染SOA变量,该变量应该包含浮点变量。但它与您的类型测试不一致,后者发现该值是浮点数。