Цель этой части функции - получить данные, относящиеся к определенной дате, из словарей, созданных другими функциями, и упорядочить их в один словарь. Когда dayId ссылается на текущую дату, часть работает нормально. Но когда дата извлекается из HTML, список stallOperatingHour становится 0 после одной итерации в цикле for. Почему это происходит и как мне это решить?
Когда ввод HTML не производится, dayId ссылается на текущую дату.
Я добавил функции печати, чтобы увидеть, как далеко заходит программа, прежде чем обнаружит ошибку (некоторые функции печати указаны ниже). Входные данные успешно извлекаются из HTML, первая итерация работает хорошо, и словарь, из которого мы создаем список, корректен во второй итерации.
def getAvailableStalls():
stallsDict = readStall()
stallMenuByDayDict = readStallMenuByDay()
stallOperatingHourDict = readStallOperatingHour()
allDaysDict = readDay()
menuItemsDict = readMenuItems()
try:
dayId,currentHour,dt_string = filterByTime() #filterByTime is the function retrieving input and processing them
except:
dayId,currentHour = -1,-1
if dayId == -1:
currentDT = datetime.now()
currentDay = currentDT.strftime('%A')
currentHour = int(currentDT.strftime('%H'))
dayId = list(k for k, v in allDaysDict.items() if v == currentDay)[0]
dt_string = datetime.now().strftime("%A, %x %H:%M:%S")
currentAvailableStallsDict = {}
unavailableStalls = 0
# Get stalls by current DT
for stallId, stallDetails in sorted(stallsDict.items()):
# Get stall operating hour
# Get Stall Operating Hours on Weekends
if(dayId == "6" or dayId == "7"):
stallOperatingHour = list(v for k, v in stallOperatingHourDict if v[0] == stallId and v[1] == dayId)
startOperatingHour = stallOperatingHour[0][2]
endOperatingHour = stallOperatingHour[0][3]
else:
# Get Stall Operating Hours on Weekdays
stallOperatingHour = list(v for k, v in stallOperatingHourDict if v[0] == stallId and (v[1] == ''))
listTemp = list(v for k, v in stallOperatingHourDict if v[0] == stallId and v[4] == "0" and v[1] == dayId)
if(len(listTemp) != 0):
stallOperatingHour.insert(1, listTemp[0])
print("before start operating hour")
print(stallOperatingHourDict)
print(stallOperatingHour)
startOperatingHour = float(stallOperatingHour[0][2])
print("pass start operating hour")
endOperatingHour = float(stallOperatingHour[0][3])
print("pass end operating hour")
Следующая часть представляет собой вывод.
Tuesday, 09/08/20 04:32:00 #correct input retrieved
before start operating hour #first iteration
dict_items([('1', ('1', '', '7', '0', '1')), ('2', ('1', '6', '7', '0', '1')), ('3', ('1', '7', '10.5', '22', '1')), ('4', ('2', '1', '7',
'19', '0')), ('5', ('2', '2', '7', '22', '0')), ('6', ('2', '3', '8', '20', '0')), ('7', ('2', '4', '10', '22', '0')), ('8', ('2', '5', '9', '21', '0')), ('9', ('2', '6', '7', '19', '0')), ('10', ('2', '7', '6', '19', '0')), ('11', ('3', '', '11', '21', '1')), ('12', ('3', '6', '11', '14', '1')), ('13', ('3', '7', '', '', '1')), ('14', ('4', '', '8', '22', '1')), ('15', ('4', '6', '8', '22', '1')), ('16', ('4', '7', '11', '22', '1')), ('17', ('5', '', '11', '21', '1')), ('18', ('5', '6', '11', '14', '1')), ('19', ('5', '7', '', '', '1'))])
[('1', '', '7', '0', '1')]
pass start operating hour
pass end operating hour
before start operating hour #second iteration
dict_items([('1', ('1', '', '7', '0', '1')), ('2', ('1', '6', '7', '0', '1')), ('3', ('1', '7', '10.5', '22', '1')), ('4', ('2', '1', '7',
'19', '0')), ('5', ('2', '2', '7', '22', '0')), ('6', ('2', '3', '8', '20', '0')), ('7', ('2', '4', '10', '22', '0')), ('8', ('2', '5', '9', '21', '0')), ('9', ('2', '6', '7', '19', '0')), ('10', ('2', '7', '6', '19', '0')), ('11', ('3', '', '11', '21', '1')), ('12', ('3', '6', '11', '14', '1')), ('13', ('3', '7', '', '', '1')), ('14', ('4', '', '8', '22', '1')), ('15', ('4', '6', '8', '22', '1')), ('16', ('4', '7', '11', '22', '1')), ('17', ('5', '', '11', '21', '1')), ('18', ('5', '6', '11', '14', '1')), ('19', ('5', '7', '', '', '1'))])
[] #and it becomes empty
IndexError: list index out of range
Если все работает, вторая итерация должна выдать stallOperatingHour = [('2','2','7','22','0')]