我对python还有点新意。最终目标是使用以下代码搜索列表并打印出列表中的每个grb.name。问题是我想要使用用户输入,我遇到的问题是,如果用户输入一个不在列表中的日期,它需要通过添加一个日期来自动纠正它,直到它到达下一个grb_date然后执行代码。这适用于start_date和end_date。
for i, grb in enumerate(results): #prolem with multiple grb's in 1 day
try:
grb_date = (re.sub('[A-Z]','',grb.name))
end_results = [i, grb_date]
data[str(grb_date)] = i # this is the important bit
# print (end_results)
except:
pass
#start_date = (input('What is the start date you want: '))
#end_date = (input('What is the end date you want: '))
while 1:
start_date = input('Please choose a start date: ')
end_date = input('Please choose an end date now: ')
try:
while data[start_date] <= data[end_date]:
print (results[data[start_date]].name)
data[start_date] += 1
except KeyError:
while data[start_date] not in end_results:
data[start_date] += 1
x = data[data[start_date]]
print ('Try using this date instead: %d'), x
这就是我现在拥有的。我一直得到KeyError&#39; 111111&#39; (或者无论start_date是什么,如果它是错的)。
答案 0 :(得分:0)
这应该有点明显
try:
while data[start_date] <= data[end_date]:
print (results[data[start_date]].name)
data[start_date] += 1
而且......
except KeyError:
while data[start_date] not in end_results:
在处理密钥错误时会出现相同的密钥start_date(由同一密钥引起)。虽然EFAP很棒,但请正确使用。
您需要将start_date设置为数据。
答案 1 :(得分:0)
您收到错误,因为不正确的start_date在dict data 中不存在作为键。
将您的最后一个while循环更改为 -
while data.get('start_date', None) not in end_results:
....