我正在尝试在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
答案 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"