我的全局变量不像我想象的那样工作

时间:2014-12-12 05:29:17

标签: python python-3.x global-variables

下面是我用来从arduino中提取一些串行数据的一些代码。此IF语句if(Ardinput == stagecode):不使用先前在同一函数中声明的全局变量。我知道它的逻辑我不知道是什么。

编辑我添加了所有代码以帮助清理

stagecode = "STAGE "

ser = serial.Serial(
port='COM3',
baudrate=9600, 
)



def stage():
            urllib.request.urlopen(url + 'f.stage')


def capture():
    global Ardinput
    print ("Start capture")



    while (1):           
            line = ser.readline()
            if (line != ""):
               print (line)
               Ardinput = line
               Ardinput = Ardinput.decode("utf-8")
               print (Ardinput + ' Befor CR')
               Ardinput = Ardinput[:-1]
               print (Ardinput)
               done = Ardinput
               break
if (Ardinput == stagecode):       
    print (stagecode + ' IN IF FUNCTION')
    #stage()

print ("Start Application" + Ardinput  )
print

capture()

2 个答案:

答案 0 :(得分:0)

您的Ardinput变量在您调用capture()函数之后才会出现,而 if语句之后正在发生

你所拥有的相当于:

def fn():
    global xyzzy
    xyzzy = 42

print xyzzy
fn()

会产生错误。在使用变量之前,您必须实际调用 fn()来创建变量。

另一种可能性是你的if语句应该是capture()函数本身的一部分,在这种情况下你只是让你的缩进错了。

目前,ifprint是该函数的,因此在变量出现之前执行。

检查if语句似乎不起作用的一个好方法,如果你确定它应该是,那就是在if之前放入一些临时调试代码,打印输出两个变量的长度和内容:

print "%d:[%s] %d:[%s]" % (len(Ardinput), Ardinput, len(stagecode), stagecode)

这应该有希望显示出任何差异。

答案 1 :(得分:0)

听起来你期望if语句存在于capture()函数中,但它不会因为它没有缩进。

无论哪种方式,在调用Ardinput函数之前,您将无法访问全局capture()。所以除非你在if语句之前调用函数,否则你会收到错误。