- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
#!/usr/bin/python
import rospy
import serial
import time
from std_msgs.msg import String
ser = serial.Serial('/dev/ttyUSB0', 9600)
print (ser.name)
time.sleep(2)
#===========================================================
# An o y ine i kateuthynsi kinisis (mikos deksamenis)
# Gia kinisi se eutheia
x_d = 0 # mm
y_d = 2000
thita_d = 0 # moires i rads
#===========================================================
camera = [0, 0, 0]
error = [0, 0, 0]
data = [0, 0, 0]
print(data)
def camera_feedback():
# dedomena apo camera-RPi-seiriaka apo allon komvo mallon...
#camera = [x_c, y_c, thita_c]
#x_c = camera[0] #isws mpei kwdikas gia na diavazei apo tin
camera[0] = 0
#y_c = camera[1] #seiriaki tu RPi (opws to serial_connection())
camera[1] = camera[1] + 250
#thita_c = camera[2]
camera[2] = 0
print(camera)
def error_calculation():
error[0] = x_d - camera[0]
error[1] = y_d - camera[1]
error[2] = thita_d - camera[2]
print(error)
def controller_equations():
# edw mpenun oi eksiswseis tu michali
# kapws pernei to error kai alla dedomena kai dinei w, A, thita_mesi gia na stalun ston PIC
if error != [0, 0, 0]:
print(error)
print(data)
data[0] = 8
data[1] = 8
data[2] = 0
else:
data = [0, 0, 0]
print('kokos')
#data = [w, A, thita_mesi] #na dw ti format dexete o kwdikas tu PIC
def serial_connection():
rospy.init_node('serial_connection', anonymous = True)
rate = rospy.Rate(10) #isws na min xreiazetai
if not rospy.is_shutdown():
##data1 = bytearray(data)
##rdata = bytearray()
##rdata.extend(data1[0:2])
##rdata.extend(data1[2:5])
##vect = list(rdata)
##print(vect)
if ser.isOpen():
print ("Port Open")
for i in range(1):
#ser.write(b'5')
#ser.write(chr(5)) auto stelnei kwdikopoiimenus xaraktires, ox$
#ser.write(5)
ser.write(bytes(data) + '\n')
#print ('Hola!')
#ser.write("Hola!\n")
time.sleep(1)
rate.sleep()
if __name__ == '__main__':
try:
while not rospy.is_shutdown():
camera_feedback()
error_calculation()
controller_equations()
serial_connection()
ser.close()
except rospy.ROSInterruptException:
pass
我运行上面的代码并收到错误:UnboundLocalError:赋值前引用的局部变量“data”
我想通过函数controller_equations()来改变全局变量data的值。我对函数camera_feedback()中的变量camera做了同样的事情,没有任何错误。我搜索了其他帖子来寻找答案,但他们都说不可能通过函数来获得全局变量。任何可能的解决方案或提示将不胜感激。我是 Python 新手,我使用 Ubuntu 16.04 和 Python 2.7。
提前致谢。
最佳答案
正如重复的帖子回复所指出的,您需要使用globals
来解决这个问题
但是,解释一下为什么它在 camera_feedback
中有效,但在 controller_equations
中无效
您不需要 globals
语句直接在函数上下文中访问全局变量!!。但是不建议保存您的像这样的调试问题的生命周期
为了解析变量,解释器总是在本地 namespace 中查找变量(确切地说是标签)引用,然后再在全局(直接父级) namespace 中搜索
在 camera_feedback
中,解释器在计算 camera[0] = 0
时,会在本地 namespace 中查找变量 camera
。由于未找到它,因此它会在其直接父级(即 module )命名空间中查找
在 controller_equations
中,您通过 if..else
语句在函数上下文中创建了一个新的环境上下文。由于在本地 namespace (if..else context
)中找不到变量data
,因此它将在直接父级中查找,即函数上下文,它也没有引用 >data
,因此它抛出UnboundLocalError
错误
要解决这个问题,您需要通过语句 globals data
将模块 namespace 中的 data
包含到函数 namespace 中,以便函数内的所有嵌套环境都可以访问它们(免责声明:这是内部处理范围的过度简化)
希望这有帮助!
关于python - 通过函数: UnboundLocalError更改全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169819/
以下代码在 Python 2.5 和 3.0 中都按预期工作: a, b, c = (1, 2, 3) print(a, b, c) def test(): print(a) prin
以下代码在 Python 2.5 和 3.0 中都按预期工作: a, b, c = (1, 2, 3) print(a, b, c) def test(): print(a) prin
从 string 导入时模块,与解析函数一起使用。 from string import punctuation def parsing_func(data): if not any(i==v
mt=0 ft=0 def amount_total(g): if g=="male": mt=mt+amount else: ft=ft+amount
我正在尝试在 leetcode 中解决这个问题。我是 leetcode 的新手。我收到 UnboundLocalError: local variable 'i' referenced before
这个问题已经有答案了: UnboundLocalError trying to use a variable (supposed to be global) that is (re)assigned
也许我今天早上的咖啡不够浓,但这种行为现在让我感到困惑: >>> a = 'foo' >>> def func1(): ... print a ... >>> def func2(): ...
我是编程新手,但我喜欢自然语言(如您所见)。我正在尝试编写一个简单的程序来帮助测试法语现在时动词。但是,在这段代码中,我不断收到错误消息,因为 CorrectAnswers 显然尚未设置为全局变量。有
def create_school(school,year): all_students = {} achievements= {} var = data.Files.get(
我正在使用 django 1.8 和 python 2.7,但我不断收到 unbounLocalError。我的views.py 中的代码看起来一切正常。但它保留分配之前引用的局部变量“cd”。如果有
例如: $ cat -n foo.py 1 def f(): 2 str = len 3 str = str('abc') 4 #
def main(): cash = float(input("How much money: ")) coins = 0 def changeCounter(n): whil
我对局部变量和 python (2.7) 有一些小问题。 我有一些代码: def foo(a): def bar(): print a return bar() >>>
这个问题在这里已经有了答案: Using global variables in a function (25 个答案) 关闭 4 年前。 所以,我一直在使用 python 作为命令提示符应用程序开
我刚开始编程并尝试写一些东西但(当然)它失败了。在我找到真正的问题之后:UnboundLocalError。因此,为了让您远离周围的所有废墟,我将代码简化为: def test(): try:
我继承了一个遗留单元测试,它试图覆盖嵌套在另一个类中的自定义类的名称 datetime。我现在正在重构它(我同意这很糟糕)但我不明白我看到的特定错误。 我看到了一个UnboundLocalError,
这个问题在这里已经有了答案: UnboundLocalError trying to use a variable (supposed to be global) that is (re)assig
这个问题在这里已经有了答案: UnboundLocalError on nested module reimport [duplicate] (2 个答案) 关闭 4 年前。 我被 python 解
这个问题在这里已经有了答案: Is it possible to modify a variable in python that is in an outer (enclosing), but n
我在 View 中有一个函数,用于上传 CSV 数据并写入数据库。那部分正在工作。但是,当我尝试检查是否有数据更新或创建时,我收到一条错误消息: "local variable 'created' r
我是一名优秀的程序员,十分优秀!