acceder a una variable desde fuera de la función en python

#!/usr/bin/env python import roslib import rospy import time from nav_msgs.msg import Odometry def position_callback(data): global q2 q2=data.pose.pose.position.x q1=data.pose.pose.position.y q3=data.pose.pose.position.z def position(): rospy.init_node('position', anonymous=True) #initialize the node" rospy.Subscriber("odom", Odometry, position_callback) if __name__ == '__main__': try: position() print q2 rospy.spin() except rospy.ROSInterruptException: pass 

el error que recibo es así:

 print q2 NameError: global name 'q2' is not defined 

Ya q2 como variable global.

Declarar q2 como una variable global hace que la variable global exista.

En realidad, llamar a la función y la ejecución de la sentencia de asignación q2 = ... causa la creación de la variable. Hasta entonces, el código no puede acceder a la variable.

position función de position no llama a position_callback , pero la pasa a rospy.Subscriber (que probablemente registra la función de callback, y no la llama directamente).


Inicialice q2 si desea acceder a la variable antes de que se establezca.

 q2 = None def position_callback(data): global q2 q2 = data.pose.pose.position.x q1 = data.pose.pose.position.y q3 = data.pose.pose.position.z 

Nunca inicializas q2 . No puede tener un valor. Trate de definirlo en el ámbito global – después de las importaciones. Entonces llámelo dentro de la position() la función position() .