我使用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: ''
有谁知道如何转换它? 提前谢谢!
答案 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)
答案 1 :(得分:5)
你可以捕获异常并将值默认为某些东西,但我真的没有看到任何不存在的东西有意义......
s = ser.read()
try:
ival = int(s)
except ValueError as e:
ival = 0 # ????
您期望的数据更有可能尚未收到,您应该等待串口,直到收到足够的数据,然后再对其进行任何操作......
答案 2 :(得分:-2)
INT(X = 0) int(x,base = 10)
将数字或字符串x转换为整数,如果没有给出参数,则返回0。如果x是数字,则它可以是普通整数,长整数或浮点数。如果x是浮点,则转换将截断为零。如果参数超出整数范围,则函数返回一个长对象。
如果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。