Python Raspberry Pi上的列表索引超出范围
当我试图让我的NRF24L01模块在Raspberry Pi 3b+上工作时,出现“列表索引超出范围”错误。代码是用python编写的,我似乎没有注意到错误Python Raspberry Pi上的列表索引超出范围,python,raspberry-pi3,Python,Raspberry Pi3,当我试图让我的NRF24L01模块在Raspberry Pi 3b+上工作时,出现“列表索引超出范围”错误。代码是用python编写的,我似乎没有注意到错误 import RPi.GPIO as GPIO from lib_nrf24 import NRF24 import time import spidev GPIO.setmode(GPIO.BCM) pipes = [[0xE8, 0xE8, 0xF0, 0xF0, 0xE1], [0xF0, 0xF0, 0xF0, 0xF0, 0x
import RPi.GPIO as GPIO
from lib_nrf24 import NRF24
import time
import spidev
GPIO.setmode(GPIO.BCM)
pipes = [[0xE8, 0xE8, 0xF0, 0xF0, 0xE1], [0xF0, 0xF0, 0xF0, 0xF0, 0xE1]]
radio = NRF24 (GPIO, spidev.SpiDev())
radio.begin(0, 17)
radio.setPayloadSize (32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)
radio.setAutoAck(True)
radio.enableDynamicPayloads()
radio.enableAckPayload()
radio.openReadingPipe(1, pipes[1])
radio.printDetails()
radio.startListening()
while True :
while not radio.available(0):
time.sleep(1/100)
a = []
b = []
receivedMessage = []
radio.read(receivedMessage, radio.getDynamicPayloadSize())
a = receivedMessage[0]
b = receivedMessage[1]
print( "Temperature:" , a, "Humidity:" , b )
错误出现在a=receivedMessage[0]
和b=receivedMessage[1]
行。
希望能有一些新的外观和建议来解决这个问题。
回溯:
Traceback (most recent call last):
File "/home/pi/Desktop/NRF24L01/VEIIIK.py", line 34, in <module>
a = receivedMessage[0]
IndexError: list index out of range
当行打印(receivedMessage)
输出[]
时,为什么不执行以下操作:
if(receivedMessage):
a = receivedMessage[0]
b = receivedMessage[1]
print( "Temperature:" , a, "Humidity:" , b )
这可能会解决问题。我想答案就在
lib_nrf24
文档中的某个地方;radio.read
应该返回您检查的值,或者它将值插入receivedMessage
参数。如果是后者,您应该检查是否实际添加了值,而不是盲目地读取空列表。什么错误消息?您从该错误中了解到了什么,您做了什么来解决它?从该错误中,我了解到receivedMessage
列表为空,因此发送的列表超出了错误范围。到目前为止,我试着从另一个人那里下载一个修改过的库,然后改用它。它没有解决问题。欢迎使用堆栈溢出!您需要提供一个包含完整错误消息的回溯。但是你的理解是对的,这个列表可能是空的。对于一些基本调试,请尝试打印(radio.read(receivedMessage,radio.getDynamicPayloadSize())和print(receivedMessage)
@wjandrea使用radio.read
和receivedMessage
的回溯和打印更新了帖子,这确实修复了错误。非常感谢:)它解决了这个问题,因为在某些情况下,程序试图从空变量(不存在)读取数据。若要修复此问题,请首先检查它是否存在,然后读取。若变量为null,请尝试访问它数据[0]
您会得到索引超出范围的错误。
if(receivedMessage):
a = receivedMessage[0]
b = receivedMessage[1]
print( "Temperature:" , a, "Humidity:" , b )