psychopy.org | Reference | Downloads | Github

Code component problem when updating PsychoPy?

If this template helps then use it. If not then just delete and start from scratch.

OS: macOS Catalina 10.15.4
PsychoPy version: 2020.1.2
Standard Standalone? (y/n) : y

So, I have this experiment that would run just fine in previous versions of PsychoPy. I updated the version of PsychoPy this morning and tried to run this experiment as usual, but it crashes every time.

There are some code components in a few routines (they are basically the same codes, just making reference to different text components), and I believe that’s where the problem is, since when I try to autogenerate the JS from Python so that I can upload it to Pavlovia, it says that there is a syntax error. What I don’t understand is why, since is was working just fine until yesterday/previous PsychoPy version I had in my computer.

I get the following message:


The codes I have are the following:

Begin Routine

sentenceTREINOList = sentenceTREINO.split(’/’)
#this breaks your sentence’s single string of characters into a list of individual
#words, e.g. ‘The quick brown fox.’ becomes [‘The’, ‘quick’, ‘brown’, ‘fox.’]

#keep track of which word we are up to:
wordNumber = -1 # -1 as we haven’t started yet

#now define a function which we can use here and later on to replace letters with ‘x’:

def replaceWithX(textList, currentWordNumber):

xSentenceTREINO = ''
for index, word in enumerate(textList): # cycle through the words and their index numbers
    if index != currentWordNumber:
        xSentenceTREINO = xSentenceTREINO + '_' * len(word) + ' ' # add a string of x characters
    else:
        xSentenceTREINO = xSentenceTREINO + word + ' ' # except for the current word

return xSentenceTREINO # yields the manipulated sentence

Each Frame

now at the very beginning of the trial, we need to run this function for the
#first time. As the current word number is -1, it should make all words ‘x’.
#Use the actual name of your Builder text component here:

text_10.text = replaceWithX(sentenceTREINOList, wordNumber)

#In the Builder interface, specify a “constant” value for the text content, e.g.
#‘test’, so it doesn’t conflict with our code.

keypresses = event.getKeys() # returns a list of keypresses

if len(keypresses) > 0: # at least one key was pushed

if 'space' in keypresses:

    thisResponseTime = t # the current time in the trial
    wordNumber = wordNumber + 1
    if wordNumber < len(sentenceTREINOList):

        if wordNumber == 0: # need to initialise a variable:
            timeOfLastResponse = 0

        # save the inter response interval for this keypress,
        # in variables called IRI_0, IRI_1, etc:
        thisExp.addData('IRI_TREINO_' + str(wordNumber), thisResponseTime - timeOfLastResponse)
        timeOfLastResponse = thisResponseTime

        # update the text by masking all but the current word
        text_10.text = replaceWithX(sentenceTREINOList, wordNumber)
    else:
        continueRoutine = False # time to go on to the next trial

elif 'escape' in keypresses:

    core.quit() # I think you'll need to handle quitting manually now.

Have you tried putting wordnumber = 0 in a Begin Experiment code tab?

Yes, same error message.