传递到另一个 if 语句时全局变量出现问题



我试图让Ardinput传递到if "(Ardinput == stagecode):"但似乎Ardinput丢失了它的内容

这是我的代码输出

Start capture
b'STAGErn'
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()

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

请改用str.strip()从开头和结尾删除所有空格:

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

并从stagecode中删除空格:

stagecode = "STAGE"

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

>>> line = b'STAGErn'
>>> Ardinput = line.decode('utf8')[:-1]
>>> print(Ardinput)
STAGE
>>> print(repr(Ardinput))
'STAGEr'

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

rn被视为空格,空格和制表符以及不间断空格也被视为空格:

>>> 'tt   Hello world!  xa0rn'.strip()
'Hello world!'

请注意,中间的空间未被删除; str.strip()仅适用于字符串的前导端和尾部。

rn表示带有新行的回车符(因此:

STAGE
Befor CR

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

相关内容

  • 没有找到相关文章

最新更新