3

我使用 pySerial 从串口读取数据,并尝试将下面的字符串转换为整数:

s=ser.read()
int(s) 

但我不能。我犯的错误是:

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

3 回答 3

12
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)
于 2015-07-28T14:30:55.737 回答
5

您可以捕获异常并将值默认为某个值,但我真的没有看到不存在的东西有什么意义......

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

更有可能您期望的数据尚未收到,您应该在串行端口上等待,直到收到足够的数据,然后再对其进行任何操作......

于 2013-04-30T12:24:54.487 回答
-2

整数(x=0) 整数(x,基数=10)

将数字或字符串 x 转换为整数,如果没有给出参数,则返回 0。如果 x 是数字,它可以是普通整数、长整数或浮点数。如果 x 是浮点数,则转换将向零截断。如果参数超出整数范围,则函数返回一个 long 对象。

如果 x 不是数字或给出了 base,则 x 必须是字符串或 Unicode 对象,表示以基数为基数的整数文字。可选地,文字可以在前面加上 + 或 - (中间没有空格)并被空格包围。base-n 文字由数字 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。

于 2013-04-30T12:23:15.320 回答