从python中的函数外部访问变量

时间:2014-11-03 14:22:13

标签: python python-2.7

#!/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

我得到的错误是这样的:

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

我已将q2定义为全局变量。

2 个答案:

答案 0 :(得分:2)

q2声明为全局变量会使全局变量存在。

实际上调用赋值语句q2 = ...的函数和执行会导致变量的创建。在此之前,代码无法访问变量。

position函数不会调用position_callback,而是将其传递给rospy.Subscriber(可能会注册回调函数,而不是直接调用它)。


如果要在设置变量之前访问变量,请初始化q2

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

答案 1 :(得分:0)

您永远不会初始化q2。它没有价值。尝试在全局范围内定义它 - 在导入之后。然后在函数position()内调用它。

相关问题