我现在正在运行此代码,它包含在其他一些内容中,这就是为什么它在变量之前有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"
谢谢!
答案 0 :(得分: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'