訪問我正在使用pySerial
讀取TTL字節流。讀取兩個字節:Python IndexError:列表索引超出範圍。無法通過索引
CheckSumByte = [ b for b in ser.read(2)]
print(CheckSumByte)
print(type(CheckSumByte))
print(str(len(CheckSumByte)))
print(CheckSumByte[0])
輸出:
[202, 87]
<class 'list'>
2
IndexError: list index out of range
我無法通過索引來訪問的任何CheckSumByte
元件(0或1)。哪裏不對?
這裏是我的代碼:
while(ReadBufferCount < 1000):
time.sleep(0.00002)
InputBuffer = ser.inWaiting()
if (InputBuffer > 0):
FirstByte = ser.read(1)
if ord(FirstByte) == 0xFA:
while ser.inWaiting() < 21: pass
IndexByte = ser.read(1)
SpeedByte = [ b for b in ser.read(2)]
DataByte0 = [ b for b in ser.read(4)]
DataByte1 = [ b for b in ser.read(4)]
DataByte2 = [ b for b in ser.read(4)]
DataByte3 = [ b for b in ser.read(4)]
CheckSumByte = [ b for b in ser.read(2)]
print(CheckSumByte[0]) #Out of Range??`
Traceback (most recent call last):
File "<ipython-input-6-5233b0a578b1>", line 1, in <module>
runfile('C:/Users/Blair/Documents/Python/Neato XV-11 Lidar/Serial9.py', wdir='C:/Users/Blair/Documents/Python/Neato XV-11 Lidar')
File "C:\Program Files (x86)\WinPython-32bit-3.4.3.3\python-3.4.3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 682, in runfile
execfile(filename, namespace)
File "C:\Program Files (x86)\WinPython-32bit-3.4.3.3\python-3.4.3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 85, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
File "C:/Users/Blair/Documents/Python/Neato XV-11 Lidar/Serial9.py", line 88, in <module>
print(CheckSumByte[0]) #Out of Range??
IndexError: list index out of range
肯尼:謝謝。更簡單的兩個字節:
CheckSumByte.append(ser.read(1))
CheckSumByte.append(ser.read(1))
工作正常,但很尷尬。這些項目是類型字節。如何使用列表理解將項添加到列表中?我想避免追加功能,因爲它很慢。
我注意到CheckSumByte的項目是整數時它不起作用。 Python 3列表理解是否需要特殊格式才能將字節添加爲字節(而不是轉換爲整數)?
你能展示完整的追溯? – falsetru
如果循環直通,會發生什麼情況。閱讀(2)並打印結果 - 對於ser.read(2)中的b:print(b,type(b)) – user1245262
user1245262 - 我喜歡你的想法。我無法得到正確的語法:CheckSumByte = [b爲ser.read(2)中的b: print(b,type(b))] – Blair