首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python函数外部访问变量

从python函数外部访问变量
EN

Stack Overflow用户
提问于 2014-11-03 14:22:13
回答 2查看 4.6K关注 0票数 1
代码语言:javascript
复制
#!/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

我得到的错误如下:

代码语言:javascript
复制
print q2
NameError: global name 'q2' is not defined

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-03 14:30:49

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

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

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

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-11-03 14:34:01

您从不初始化q2。它不可能有价值。在导入之后,尝试在全局范围内定义它。然后将其称为position()函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26716133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档