Error: unsupported operand type(s) PsychoPy

Error: unsupported operand type(s) PsychoPy

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

现在我在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 sheet 中定义: Excel Sheet with variables

我想不通,问题是什么。我希望有一个人可以帮助我。谢谢!

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

... SOA-win.monitorFramePeriod ...

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

您没有显示 SOA 的定义位置。你能展示一下吗,或者可能是 post 整个项目的某个地方?要验证类型到底是什么,您可以添加以下行:

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)): 

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

您可以尝试将此文件导出为 .csv 而不是本机 .xlsx。如果这些实际上是数值,那么 PsychoPy 会将该列读取为数字。但是您可能应该确定是什么让 Excel 将该列中的那些条目视为文本。无法从字体中分辨出来,但有时是因为输入了 "oh point five" 而不是 "zero point five".

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