我坚持以下问题: 我在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
我无法弄清楚,问题是什么。我希望有一个人可以帮助我。谢谢!
答案 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变量,该变量应该包含浮点变量。但它与您的类型测试不一致,后者发现该值是浮点数。