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 变量,该变量应包含浮点变量。但这与您的类型测试不一致,类型测试发现该值是一个浮点数。
我遇到了以下问题: 我在 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 变量,该变量应包含浮点变量。但这与您的类型测试不一致,类型测试发现该值是一个浮点数。