0

我现在正在运行这段代码,它嵌入在其他一些东西中,这就是为什么它self.在变量之前。将ser.readline()返回 1。但我认为它是string, '1'。无论如何,它的结果是我的if陈述不起作用,我认为这是因为某种类型不匹配,但我不能指望它。我已经尝试了一切以使其正常工作。当print self._dinput_value返回 1 并且它的类型是str时,我很难过。

无论如何,它是:

 print "sending data"
 ser.write("6" + "," +str(self._pin_no) +","+"1")
 time.sleep(1)
 self._dinput_value = ser.readline(2)
 print self._dinput_value
 print type(self._dinput_value)
 time.sleep(1)

if str(self._dinput_value) =="1":
    self._d = False
    return self._d
elif str(self._dinput_value) == "2":
    self._d =True
    return self._d

else:
    print "CODE EXITED with ERROR ??: Arduino went funny, sorry"

谢谢!

4

1 回答 1

2

readline()不删除尾随换行符。该值很可能"1\n"\n序列是换行符),这就是相等测试失败的原因。

尝试添加rstrip()方法调用,如下所示:

self._dinput_value = ser.readline(2).rstrip()

这将从字符串中删除所有尾随空格。


如果您在调试此类问题时遇到问题,请尝试您遇到问题的值print(repr(x))在哪里。x它将显示该值的 Python 表示。例如,如果它是一个字符串,则像换行符这样的特殊字符将被转换为转义序列,以便您可以准确地看到该值包含的内容:

>>> x = sys.stdin.readline()
1
>>> print(repr(x))
'1\n'
于 2013-07-24T14:37:37.520 回答