这部分函数的目的是从其他函数构建的词典中获取与某个日期相关的数据,并将它们排列到一个词典中。当dayId指的是当前日期时,部件工作正常。但是当从HTML中检索到日期时,在for循环中进行一次迭代后,stallOperatingHour列表将变为0。为什么会这样?我该怎么解决
如果没有来自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')]
目前没有回答
相关问题 更多 >
编程相关推荐