0

我正在尝试在 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
4

1 回答 1

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 是 [],则主题回答“no-go”,反之,如果 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"
于 2014-05-08T22:11:20.047 回答