【问题标题】:Error: unsupported operand type(s) PsychoPy错误:不支持的操作数类型 PsychoPy
【发布时间】:2015-12-17 14:27:42
【问题描述】:

我被以下问题困扰: 我在 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 表中定义: Excel Sheet with variables

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

【问题讨论】:

    标签: numpy python-unicode psychopy


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢 - 更改 excel 单元格中的格式效果很好!我猜,只有一些值由于某种原因没有被定义为数字,当程序来到这一行时,它就崩溃了。再次感谢。
    【解决方案2】:

    显然变量 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)): 
    

    【讨论】:

    • 感谢您的快速响应。变量 SOA 在 Excel 表中定义。它的值是 0.5 或 3(0.5 秒或 3 秒)。我也尝试了 0,5 和 3,但它导致了同样的错误。
    • 打印类型时(typeof不起作用,但是类型),我得到答案 SOA = 0.5
    • 错误消息“unsupported operand type(s) for -: 'unicode' and 'numpy.float64'”表明在发生错误时,SOA 有一个 unicode 值而不是 float ;这可能是因为 Excel 工作表包含一个看起来像数字但实际上是字符串的单元格值。您能否在使用 SOA 的行之前添加以下行:assert type(SOA) == float, "SOA is not a float, but %r" % type(SOA)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2020-07-27
    • 1970-01-01
    • 2014-06-15
    • 2012-11-01
    相关资源
    最近更新 更多