Python的全球声明,但我得到的是说其不存在错误

问题描述 投票:0回答:1

这已经被问了很多次的SO,但我有我没有看到一些其它的错误:

#!/usr/bin/env python

import rospy
from geometry_msgs.msg import Twist
from rosbook.msg import Detector

def scan_callback(msg):
    global closest
    global closest_dir
    closest_dir = ""
    closest = min(msg.forward, msg.left, msg.right, msg.back)
    if (msg.forward == closest):
        closest_dir = "forward"
    elif (msg.left == closets):
        closest_dir = "left"
    elif (msg.right == closest):
        closest_dir = "right"
    else:
        closest_dir = "back"


# Create a Publisher object. queue_size=1 means that messages that are
# published but not handled by received are lost beyond queue size.
cmd_vel_pub = rospy.Publisher('/cmd_vel', Twist, queue_size=1)
detect_sub = rospy.Subscriber('detector', Detector, scan_callback)

# Initialize this program as a node
rospy.init_node('pid_demo')

print (rospy.Time.now())
tw_for = Twist()
tw_for.linear.x = 0.3
tw_rot = Twist()
tw_for.angular.z = 0.5


# rate object gets a sleep() method which will sleep 1/10 seconds
rate = rospy.Rate(1)

while not rospy.is_shutdown():
    print (rospy.Time.now())
    if (closest_dir != "forward"):
        cmd_vel_pub.publish(tw_for)
    else:
        cmd_vel_pub.publish(tw_rot)
    rate.sleep()

给出了错误:

0
0
Traceback (most recent call last):
  File "/home/pitosalas/catkin_ws/src/rosbook/scripts/pid_driver.py", line 42, in <module>
    if (closest_dir != "forward"):
NameError: global name 'closest_dir' is not defined

这两个0的很有趣。这意味着回调调用之前while循环跑一次,并触发该错误。我试着动了全球各地,并更改名称,但对我来说,这看起来完全有效的!

python
1个回答
0
投票

只要定义方法closest之外的变量closest_dirscan_callback。充满希望你不会看到回溯

closest_dir = None
closest = None

def scan_callback(msg): ...
© www.soinside.com 2019 - 2024. All rights reserved.