Hi! I am coding an n-back task which checks whether a response is correct from right/left keys, my code keeps throwing up 2 errors:
- When the second letter is presented (my code skips all keypresses for the first letter), my code immediately goes to line A (I’ve marked this part in my code below). It shouldn’t even run this line as this happens even when pressing left/right and that part is if a resposne is None. Why does my experiment not detect keypresses?
- When running those lines, if I remove those lines assining “None” to keys_n.rt and such I get the error
keys_n[0].rt = 0
IndexError: list index out of range
Otherwise if I run it as is with the lines assigning None/0 to keys_n.rt and keys_n.name, I get the following error:
keys_n[0].rt = 0
AttributeError: 'str' object has no attribute 'rt'
Finally, if I keep the code just as keys_n.rt and keys_n.name (for data saving and such), I get the following error:
thisExp.addData('N back RT',keys_n.rt)
AttributeError: 'list' object has no attribute 'rt'
The full snippet of code is below:
for i in nback_list1:
for j in i:
nback1_start = core.getAbsTime()
if kb.getKeys(keyList=['escape']):
shutdown()
thisLetter = nback_letters1.index(j)
corrAns = nback_corrAns1[thisLetter]
letter_present = TextStim(win, text=nback_letters1[thisLetter], height=0.5)
fixation_cross(0.5)
if thisLetter != 0:
# Use clock-based timing
nback_clock.reset()
nback_kb1.clock.reset()
start_marker_sent = False
while nback_clock.getTime() < 2:
if nback_clock.getTime() < 0.5:
letter_present.draw()
if start_marker_sent == False:
win.callOnFlip(port.write('F'.encode()))
start_marker_sent = True
else:
blank_.draw()
win.flip()
keys_n = nback_kb1.getKeys(keyList = ['left', 'right'])
# Get responses
if len(keys_n) > 0:
if corrAns == keys_n[0].name:
answer = 1
elif corrAns != keys_n[0].name:
answer = 0
elif keys_n in ['', [], None]:
answer = 'None'
keys_n = ['None']
keys_n[0].rt = 0
keys_n[0].name = 'None'
else:
answer = 'error'
port.write('f'.encode())
# Saving trial data
thisExp.addData('N back RT',keys_n[0].rt)
thisExp.addData('Stimulus presented',thisLetter)
thisExp.addData('N back response',answer)
thisExp.addData('N back start',nback1_start)
thisExp.nextEntry()
# Saving response data
nback_results = nback_results.append({'Trial number': i,
'Stimulus presented': thisLetter,
'Key pressed': keys_n[0].name,
'Response': answer,
'Reaction time': keys_n[0].rt})
nback_results['Trial number'] = i
nback_results['Stimulus presented'] = thisLetter
nback_results['Key pressed'] = keys_n[0].name
nback_results['Response'] = answer
nback_results['Reaction time'] = keys_n[0].rt
else:
nback_clock.reset()
while nback_clock.getTime() < 2:
if nback_clock.getTime() < 0.5:
letter_present.draw()
else:
blank_.draw()
win.flip()
I would appreciate any help, thank you!