在串行连接中将字符串转换为int

时间:2014-03-30 17:19:13

标签: python serial-port

我正在尝试从串行连接中读取一行并将其转换为int:

print arduino.readline()
length = int(arduino.readline())

但收到此错误:

  

ValueError:基数为10的int()的文字无效:''

我查找了这个错误,意味着无法将空字符串转换为int,但问题是,我的readline不是空的,因为它将其打印出来。

4 个答案:

答案 0 :(得分:3)

print语句将其打印出来,下一个调用将读取下一行。你应该这样做。

num = arduino.readline()
length = int(num)

由于您提到Arduino正在返回C样式字符串,因此您应该删除NULL字符。

num = arduino.readline()
length = int(num.strip('\0'))    

答案 1 :(得分:1)

当你说

print arduino.readline()

您已阅读当前可用的热线。因此,下一个readline可能无法获取任何数据。您可能希望将其存储在像此

这样的变量中
data = arduino.readline()
print data
length = int(data)

由于数据中似乎包含空字符(\0),您可能想要将其删除(

data = arduino.readline().rstrip('\0')

答案 2 :(得分:1)

每次调用readline()都会读取一个新行,因此您的第一个语句已经读取了一行,下次调用readline()时数据不再可用。

试试这个:

s = arduino.readline()
if len(s) != 0:
    print s
    length = int(s)

答案 3 :(得分:0)

问题是当arduino开始发送串行数据时,它最初通过发送空字符串来启动,因此pyserial会获取一个空字符串'',它不能转换为整数。您可以在serial.readline()之上添加延迟,如下所示:

while True:
    time.sleep(1.5)
    pos = arduino.readline().rstrip().decode()
    print(pos)