以 10 为底的 int() 的无效文字:'328.94'(将字节转换为 int() 时)
invalid literal for int() with base 10: '328.94'(while converting bytes to int())
这是我的代码:
import serial
print('Arduino is setting up')
# Setting up the Arduino board
arduinoSerialData = serial.Serial('com4', 9600)
while True:
if arduinoSerialData.inWaiting() > 1:
myData = arduinoSerialData.readline()
myData = str(myData)
myData = myData.replace("b'", '')
myData = myData.replace("\r\n'", '')
myData1=myData
if myData1.find("a"):
myData1= myData1.replace("a",str(0))
if int(myData1)<100:
print(myData)
这段代码的作用是从连接到 arduino 板上的超声波传感器导入数据,并打印它。myData
最初以字节为单位,所以我将其转换为字符串,但我似乎无法将其转换为 int
。当我尝试上面的代码时,我尝试了这段代码,我得到了 error.Anyone 知道如何解决这个问题吗?谢谢!
如果给int()
一个字符串,它需要是一个整数。如果你有一个non-integer,你可以先用float()
转换它,然后用int()
把那个浮点值转换成一个整数,根据以下成绩单:
>>> print(int("328.94")) # Will not work.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '328.94'
>>> print(float("328.94")) # Convert string to float.
328.94
>>> print(int(float("328.94"))) # Convert string to float to int.
328
>>> print(int(float("328.94") + 0.5)) # Same but rounded.
329
最后一个是一个选项,如果您希望它四舍五入到最接近的整数,而不是截断。
看来您的字节到字符串的转换不正确。为什么不试试这个:
1. Bytes to string conversion:
mydata = myData.decode("utf-8")
2. Eliminatinf trailing newline characters:
myData = myData.strip("\r\n")
确保生成的字符串仅包含要转换为 int 的数字字符。你可以做这个检查:
if mydata1.isdigit() and int(mydata1) < 100:
<your code>
如果你的字符串包含浮点数,那么你可以这样做:
if mydata1.replace(".", "").isdigit() and int(float(mydata1)) < 100:
这是我的代码:
import serial
print('Arduino is setting up')
# Setting up the Arduino board
arduinoSerialData = serial.Serial('com4', 9600)
while True:
if arduinoSerialData.inWaiting() > 1:
myData = arduinoSerialData.readline()
myData = str(myData)
myData = myData.replace("b'", '')
myData = myData.replace("\r\n'", '')
myData1=myData
if myData1.find("a"):
myData1= myData1.replace("a",str(0))
if int(myData1)<100:
print(myData)
这段代码的作用是从连接到 arduino 板上的超声波传感器导入数据,并打印它。myData
最初以字节为单位,所以我将其转换为字符串,但我似乎无法将其转换为 int
。当我尝试上面的代码时,我尝试了这段代码,我得到了 error.Anyone 知道如何解决这个问题吗?谢谢!
如果给int()
一个字符串,它需要是一个整数。如果你有一个non-integer,你可以先用float()
转换它,然后用int()
把那个浮点值转换成一个整数,根据以下成绩单:
>>> print(int("328.94")) # Will not work.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '328.94'
>>> print(float("328.94")) # Convert string to float.
328.94
>>> print(int(float("328.94"))) # Convert string to float to int.
328
>>> print(int(float("328.94") + 0.5)) # Same but rounded.
329
最后一个是一个选项,如果您希望它四舍五入到最接近的整数,而不是截断。
看来您的字节到字符串的转换不正确。为什么不试试这个:
1. Bytes to string conversion:
mydata = myData.decode("utf-8")
2. Eliminatinf trailing newline characters:
myData = myData.strip("\r\n")
确保生成的字符串仅包含要转换为 int 的数字字符。你可以做这个检查:
if mydata1.isdigit() and int(mydata1) < 100:
<your code>
如果你的字符串包含浮点数,那么你可以这样做:
if mydata1.replace(".", "").isdigit() and int(float(mydata1)) < 100: