下面是我用来从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()
答案 0 :(得分:0)
您的Ardinput
变量在您调用capture()
函数之后才会出现,而 if
语句之后正在发生
你所拥有的相当于:
def fn():
global xyzzy
xyzzy = 42
print xyzzy
fn()
会产生错误。在使用变量之前,您必须实际调用 fn()
来创建变量。
另一种可能性是你的if
语句应该是capture()
函数本身的一部分,在这种情况下你只是让你的缩进错了。
目前,if
和print
是该函数的外,因此在变量出现之前执行。
检查if
语句似乎不起作用的一个好方法,如果你确定它应该是,那就是在if
之前放入一些临时调试代码,打印输出两个变量的长度和内容:
print "%d:[%s] %d:[%s]" % (len(Ardinput), Ardinput, len(stagecode), stagecode)
这应该有希望显示出任何差异。
答案 1 :(得分:0)
听起来你期望if语句存在于capture()
函数中,但它不会因为它没有缩进。
无论哪种方式,在调用Ardinput
函数之前,您将无法访问全局capture()
。所以除非你在if语句之前调用函数,否则你会收到错误。