我无法使用python将空字符串转换为整数

时间:2013-04-30 12:18:58

标签: python python-2.x

我使用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: '' 

有谁知道如何转换它? 提前谢谢!

3 个答案:

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