心理键盘答案分解

时间:2014-05-08 12:18:48

标签: python keyboard psychopy

我正在尝试在Psychopy中编写Go_nogo任务。即使我设法编写了一个有效的脚本,仍然有一些事情会引起麻烦。首先,我展示情绪刺激的图片(im_n,神经; im_a,情感),如果呈现中性情感图片,人们只应通过按“空格”来回答。当我运行下面的代码时,一切正常,直到我没有按任何键或错误的键。所以我的问题是,如何在不回答的情况下编写我不会被踢出的代码......?谢谢大家!

for im in imlist: # Loop for each Image in the List
    picShown = bitmap.setImage(im)
    bitmap.draw()
    win.flip()
    rt_clock.reset()
    resp = False

    while rt_clock.getTime() < timelimit: # timelimit is defined 2 s
         if not resp:
             resp = event.getKeys(keyList=['space'])
             rt = rt_clock.getTime()

    if im in im_n: # im_n is an extra list of one kind of images
         correctResp = 'space'
         if resp[0]==correctResp:
             corrFb.draw() # is defined as a "green O"
         else:
            incorrFb.draw() # is defined as a "red X"

    win.flip()
    core.wait(ISI)

我收到错误消息:

if resp[0]==correctResp:
IndexError: list index out of range

1 个答案:

答案 0 :(得分:1)

我的猜测是您在if resp[0]==correctResp:行收到此错误消息:

IndexError: list index out of range

这是真的吗?如果是,那只是因为如果没有收集回复,event.getKeys()会返回一个空列表[]。执行[][0]会给你上面的错误,因为没有第一个元素(索引零)就像[1,2,3,4][1000]会给你同样的错误。请注意,即使您按下很多键并且它们都不在keyList中,getKeys也会返回一个空列表,因为它会忽略除keyList内容之外的所有内容(除非您设置keyList = None,在这种情况下它接受所有键)。

有一些简单的方法可以解决这个问题。首先,您可以简单地检查resp是否为空,如果是,则给出“失败”分数,如果不是,则仅检查是否正确。一个更通用的解决方案,可以使用许多响应键和评分标准,是if correctResp in resp然后得分成功,如果是的话。此比较也适用于空列表,在这种情况下,它始终返回False,因为每个定义的空列表不能包含任何内容。

但在您的特定情况下,您只有一个响应选项,因此它更简单!由于你已经“过滤”了响应单击keyList,你知道如果resp是[],主题回答“禁止”,相反如果resp不是[],他/她回答“go”。所以:

if im in im_n:  # im_n is an extra list of one kind of images 
     if resp:  # if subject answered 'go'
         corrFb.draw() # is defined as a "green O"
     else:
        incorrFb.draw() # is defined as a "red X"

实际上,我怀疑你也希望在没有中性图像的情况下提供反馈。在这种情况下,请将正确定义为bool(resp) is (im in im_n)

 if bool(resp) is (im in im_n):  # if answer correspond to trial type
     corrFb.draw() # is defined as a "green O"
 else: 
     incorrFb.draw() # is defined as a "red X"