2013-07-24 46 views
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" 

謝謝!

+0

不要使用打印。使用repr來查看價值是什麼。我認爲在1.後面可能會出現一個換行符。 – zhangyangyu

+0

發佈特定的錯誤和回溯使我們在嘗試幫助時不必猜測太多。 – msw

回答

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' 
+0

美麗!作品一種享受! – user2137452