传递给另一个if语句时全局变量问题

时间:2014-12-12 14:26:47

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

我试图让Ardinput进入if "(Ardinput == stagecode):",但似乎Ardinput丢失了它的内容

这是代码

的输出
Start capture
b'STAGE\r\n'
STAGE
 Befor CR
STAGE

代码:

url = config.url()

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)
            if (Ardinput == stagecode):       
                print (stagecode + ' IN IF FUNCTION')
                stage()
capture()

2 个答案:

答案 0 :(得分:1)

您只删除了\n换行符,但保留了\r回车符。

使用str.strip()代替从开头和结尾删除所有空格:

Ardinput = line.decode('utf8').strip()

并从stagecode中删除空格:

stagecode = "STAGE"

为了将来参考,如果您使用repr()或甚至ascii()函数生成值的字符串文字版本,则更容易发现这些差异:

>>> line = b'STAGE\r\n'
>>> Ardinput = line.decode('utf8')[:-1]
>>> print(Ardinput)
STAGE
>>> print(repr(Ardinput))
'STAGE\r'

注意后者如何显示值中仍有\r回车字符。

\r\n被视为空格,空格和制表符以及non-break space

>>> '\t\t   Hello world!  \xa0\r\n'.strip()
'Hello world!'

请注意,中间的空间没有被移除; str.strip()仅适用于字符串的引导和尾端。

答案 1 :(得分:0)

\r\n表示带有换行符的回车符(因此:

STAGE
Befor CR

而不是STAGE Befor CR)。您必须使用Ardinput.decode('utf-8').strip()将其删除以删除换行符,或使用Ardinput.decode('utf-8')[:-2]删除最后2个字符。

相关问题