Have been receiving sometimes an erroneous line number in the script code debugging:
In this particular example, I only have 226 lines of code (as per UR Editor + notepad), but it reports 256…
Since there is no label, I am unable to know which line it is refering to specifically. Most of the time I do get a label though, so I wonder why there is none this time.
The line referred to in the popup is the script line in the executed program, which is the script file concentrated into the existing UR program.
As an example:
If you create a script code like:
There is an error on line 4 since
var = p[0,1,2,3,4] = 1is illegal. (Double assignment + poses must be initialized with 6 numerics).
However, when I am executing my program, I am getting this error:
Thus, the error is stated at line 32.
This happens because the script file
myscript.script just contributes it’s script code to the program script code.
My program “linecounter” is saved as a .URP file (UR program file), but also as a .script file, representing what script code the program eventually is translated into.
By opening the file
linecounter.script I can read my actual code:
Hence I can see, that in the beginning of my script file, a lot of commands are coming from the Installation settings (TCP setup, payload, contributions from URCap installation nodes…).
The script from
myscript.script is appended to the program from script line 28 to 34, why the actual error that URControl/RTMachine reports is on line 32.
But then my main robot program is 255 lines long, and the error is about line 256, which does not contain anything and would explain the empty label, but not what it is flagging.
From the script code I can see that you have a double function definition.
E.g. if your program is named “myFunc”.
You create a script code that defines a function that is called
Thus, when you save your program, both your program and your script function has same name:
def myFunc() # installation stuff $1 RobotProgram $2 scriptcode.script def myFunc(): # some code end myFunc() end
Hence, when you are calling
myFunc() in the program, you are re-defining the function and calling the function itself.
This is however not the one creating the error, this is just a dangerous practice.
In your code you have an if/else-if function like:
def function(code): if code==0: #do something elif code==1: #do something elif code==2: #do something elif code==3: #do something end
Thus, you are one
endshort at the end of the if/else-if branching.
end finishing the elif-statement resolves the error.
The reason why the syntax error comes at the last line is, that the main program in case of a missing
end is missing the end-command.
def main_program(): #installation stuff def program(): def subprogram(): if something: #code elif something_else: #code # this is where an `end` command is missing to finish off the if-elif end # actual end of if, but should be end of subprogram() end # actual end of subprogram(), but should be end of program() end # actual end of program(), but should be end of main_program() # missing end of main_program(), thus error on last line