ваша проблема в том, что вы вызываете метод рекурсивно и, следовательно, во втором раунде вы вызываете его с самим объектом, а не со списком!
в for-l oop этой строке:
recursiveCheck(equipment)
вы вызываете функцию с одним объектом Equipment, и при запуске она пытается выполнить for-l oop для этого объекта, который не входит в ваш список! Вы, вероятно, хотели, чтобы ваш код был таким:
class Equipment:
def __init__(self, equipmentType, sensor, pin):
self.equipmentType = equipmentType
self.sensor = sensor
self.pin = pin
dht11Sensor = Adafruit_DHT.DHT11
minus20 = Equipment("Minus 20 Freezer", dht11Sensor, 4)
minus80 = Equipment("Minus 80 Freezer", dht11Sensor, 4)
incubator24 = Equipment("24 Degree Incubator", dht11Sensor, 4)
incubator18 = Equipment("18 Degree Incubator", dht11Sensor, 4)
equipment = [minus20, minus80, incubator24, incubator18]
def recursiveCheck(equipmentList):
for equipment in equipmentList:
humidity, temperature = Adafruit_DHT.read(equipment.sensor, equipment.pin)
if humidity is not None and temperature is not None:
print(f"Your {equipment.equipmentType} is currently {temperature} degrees C and the humidity is {humidity}%")
else:
recursiveCheck(equipmentList)
time.sleep(5)
recursiveCheck(equipmentList)
recursiveCheck(equipment)
Итак, подытожим: при первом запуске вашего кода он работает нормально и не обнаруживает никаких ошибок (вы можете проверить его с помощью простая печать или счетчик), ошибка возникает, когда ваш код переходит к оператору else в for-l oop, потому что вы пытаетесь передать объект вместо списка!
=== update:
, поэтому, если вы хотите запустить список из заданного индекса, когда он не работает, вы можете сделать это:
class Equipment:
def __init__(self, equipmentType, sensor, pin):
self.equipmentType = equipmentType
self.sensor = sensor
self.pin = pin
dht11Sensor = Adafruit_DHT.DHT11
minus20 = Equipment("Minus 20 Freezer", dht11Sensor, 4)
minus80 = Equipment("Minus 80 Freezer", dht11Sensor, 4)
incubator24 = Equipment("24 Degree Incubator", dht11Sensor, 4)
incubator18 = Equipment("18 Degree Incubator", dht11Sensor, 4)
equipment = [minus20, minus80, incubator24, incubator18]
def recursiveCheck(equipmentList, index=0):
for i in in range(index, len(equipmentList)):
equipment = equipmentList[i]
humidity, temperature = Adafruit_DHT.read(equipment.sensor, equipment.pin)
if humidity is not None and temperature is not None:
print(f"Your {equipment.equipmentType} is currently {temperature} degrees C and the humidity is {humidity}%")
else:
recursiveCheck(equipmentList, i)
return;
while True:
recursiveCheck(equipment)
time.sleep(5)
, поэтому я сделал вашу функцию нерекурсивной, потому что, если я этого не сделал что во время выполнения это стало бы беспорядком, и, возможно, стало трудно следить за тем, куда он идет !!