【问题标题】:psychopy keyboard answer breaks down心理键盘答案崩溃了
【发布时间】:2014-05-08 12:18:47
【问题描述】:

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

【问题讨论】:

  • 通常,在问题中包含错误消息总是好的,因此对于未来的读者搜索谷歌并来到这里解决类似问题,您可能希望使用该信息和其他信息更新您的问题我没有考虑到这一点。
  • 是的,你是对的。我添加了您正确假设的错误消息

标签: python keyboard psychopy


【解决方案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"

【讨论】:

  • 谢谢,太好了。即使我必须阅读并了解有关“bool”功能的更多信息,它也可以完美运行... :)
  • bool 有时很有用。一般来说,emptiness和0是False。其他都是真的。
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2020-12-22
  • 2015-12-09
相关资源
最近更新 更多