if语句不起作用,似乎是一个类型错误

时间:2013-07-24 14:33:26

标签: python types serial-port

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

谢谢!

1 个答案:

答案 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'