我当前正在尝试读取一个串行端口,有时数据“损坏”。
我期望这样的数据
['CPS', '0', 'CPM', '11', 'uSv/hr', '0.06', 'SLOW']
打开串行端口后的第一个读数始终是
['\x00']
然后在未知时间内读取数据就可以了,直到串行端口发出类似这样的信息
['CPS', '0', 'CPM', '21', 'uSv/hr', '\x000.11', 'SLOW']
我已经尝试通过以下方法确保读数正确 这相当丑陋,条件检查:
serialData = serialConnection.readline()
serialData = "".join(serialData.split())
serialList = serialData.split(",")
if (len(serialList) < 7 or serialList[5][0] == "\\"
or serialList[0] != "CPS" or serialList[2] != "CPM"):
uSvH = 0.1
else:
uSvH = float(serialList[5])
因此,我正在检查读取的数据是否正确(七个条目),第一个条目始终必须是CPS,并且在收到\ x *而不是float时,它将读数设置为默认值。
但是以某种方式,当读取错误时,此操作将失败。
是否有更好的方法来清理读数或确保接收到的数据正常?
答案 0 :(得分:0)
好像我在想的太复杂了。一个简单的try else语句完成了工作。
if(len(serialList) == 7):
try:
uSvH = float(serialList[5])
except ValueError:
uSvH = 0.1
if (len(serialList) < 7 or serialList[0] != "CPS" or serialList[2] != "CPM"):
uSvH = 0.1
现在,脚本会传递一些随机读数。