我在python文件上引用变量时遇到问题。这是代码:
FG_E = 9
FG_R = 8
START = 7
READY = 9
MC = 3
BRAKE = 5
ERROR = 6
a = 2
b = 3
position = 0
def build_message(signal):
message = position
message = message | (0b1<<signal)
s = bin(message)
s = s[2:len(s)]
s = (16-len(s))*'0' + s
s0 = s[0:len(s)/2]
s1 = s[len(s)/2:len(s)]
s0 = s0[::-1]
s1 = s1[::-1]
s_final = int(s0 + s1, 2)
position = s_final
print bin(s_final)
return s_final
build_message(FG_R)
我得到的错误是: UnboundLocalError:局部变量&#39; position&#39;参考berofe assigment
答案 0 :(得分:3)
问题行在函数position = s_final
中实际为build_message
。
如果不存在,则message = position
将起作用,因为Python解释器会知道您引用的position
变量。
但在这种情况下,它很模糊,因为您稍后会重新分配到position
(position = s_final
)。
您应该重新考虑代码的设计,或者将global position
添加为build_message
中的第一行。请注意,正如它所说,它会使position
成为一个全局变量,build_message
会在整个代码中的每个位置更改position
的值。
编辑快速演示:
global_var = 0
def foo1():
print(global_var)
def foo2():
print(global_var)
global_var = 1
def foo3():
global global_var
print(global_var)
global_var = 1
print(global_var)
foo1()
>> 0
foo2()
>> UnboundLocalError: local variable 'global_var' referenced before assignment
foo3()
>> 0
1
答案 1 :(得分:1)
您需要使用global
关键字来访问全局变量。
def build_message(signal):
global position
message = position
答案 2 :(得分:0)
如果您将外部变量用于函数,您可以考虑将其作为参数传递,例如:
def build_message(signal,position):
pass