2013-04-30 48 views
1

我用pySerial來讀取串口數據爲整數,我試圖將字符串轉換下方整數:我不能轉換爲空字符串使用python

s=ser.read() 
int(s) 

但我can't.The我採取的錯誤是:

Traceback (most recent call last): 
File "C:\Documents and Settings\User\Desktop\ser1.py", line 24, in <module> 
int(s) 
ValueError: invalid literal for int() with base 10: '' 

有誰知道如何轉換它? 在此先感謝!

+4

你想要在轉換空字符串時得到什麼數字? – shyam 2013-04-30 12:22:39

+0

它應該是讀取串行端口,所以它不會是空的。你能給我提供任何解決方案嗎? – user2335656 2013-04-30 12:31:56

回答

-2

INT(X = 0) INT(X,鹼= 10)

將數字轉換或串x爲整數,或者如果沒有給出參數返回0。如果x是一個數字,它可以是一個純整數,一個長整數或一個浮點數。如果x是浮點,則轉換將截斷爲零。如果參數不在整數範圍內,則該函數會返回一個長對象。

如果x不是數字或如果基給出,則x必須是字符串或Unicode對象表示基數基字面的整數。或者,文字可以在前面加上+或 - (兩者之間沒有空格)並用空格包圍。甲基 - 正文字由數字0到n-1,用a到z(或A至Z)具有值10〜35的默認的鹼是10允許的值是0和2-36。 base-2,-8和-16文字可以有選擇地以0b/0B,0o/0O/0或0x/0X作爲前綴,就像代碼中的整數文字一樣。基0意味着準確地解釋字符串作爲文字的整數,從而使實際的基礎是2,8,10,或16

+0

簡單地引用大量文檔並沒有什麼幫助,特別是沒有將其標記爲這樣。 – 2013-04-30 12:33:00

+0

你可以用異常聲明創建一個函數返回一個默認值。 def num(s):try:return int(s)except exceptions.ValueError:return 0 – 2013-04-30 12:36:20

4

你可以捕獲該異常和默認值的東西,但我真的不看到有什麼東西從不存在有意義...

s = ser.read() 
try: 
    ival = int(s) 
except ValueError as e: 
    ival = 0 # ???? 

這將是更有可能的是你期待中的數據只是一直還沒有收到,你應該串口上等到在做任何事情之前收到足夠的數據...

6
int('0'+s) 

用零加上字符串。把它看作一個微型解析步驟。 我無法想象這種情況不會奏效。

這是用例我: 轉換字符串數組numpy的爲整數。

def _intStrArray(pos): return int('0'+pos) 
np.intStrArray = np.vectorize(_intStrArray) 

print(arr) 

array([['', '', '', '', '', '', '', '', '', '', '', '', ''], 
     ['', '', '1', '', '', '2', '', '2', '', '', '', '', ''], 
     ['', '2', '2', '', '3', '2', '', '', '2', '', '', '', ''], 
     ['', '2', '', '3', '2', '2', '3', '4', '', '4', '', '', ''], 
     ['', '', '3', '2', '2', '', '', '3', '3', '', '2', '1', ''], 
     ['', '', '', '1', '2', '', '3', '2', '', '', '', '', ''], 
     ['', '', '2', '', '2', '4', '3', '', '2', '1', '', '2', ''], 
     ['', '', '', '', '', '', '2', '', '', '1', '', '1', ''], 
     ['', '', '', '', '', '', '', '', '', '', '', '', '']], dtype=object) 

print(np.intStrArray(arr)) 

array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 1, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0], 
     [0, 2, 2, 0, 3, 2, 0, 0, 2, 0, 0, 0, 0], 
     [0, 2, 0, 3, 2, 2, 3, 4, 0, 4, 0, 0, 0], 
     [0, 0, 3, 2, 2, 0, 0, 3, 3, 0, 2, 1, 0], 
     [0, 0, 0, 1, 2, 0, 3, 2, 0, 0, 0, 0, 0], 
     [0, 0, 2, 0, 2, 4, 3, 0, 2, 1, 0, 2, 0], 
     [0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) 

發現我的數據是多麼混亂的是,我還加了str()。如果數據類型可靠,這是可選的。

def _intStrArray(pos): return int('0'+str(pos)) 
np.intStrArray = np.vectorize(_intStrArray)