The Object.connect() method returns an Error value which you can compare using the Error constants (OK for success, ERR_* for failure). Therefore, if you wish to perform error checking, you need to store the result in a variable, or compare the result of the operation directly as follows:
if state_node.connect("finished", self, "_change_state") != OK:
push_error("Error connecting state node.")
Well I guess it’s better than nothing, but it makes the code so unnecessarily verbose considering that anyone who wanted to do it that way could just use is_connected()…
Did you see my comment about playing animations, by the way?