Python 索引错误,倒计时日历不工作

Python 索引错误,倒计时日历不工作,python,tkinter,Python,Tkinter,你能帮我写代码吗 我想要一个if-else语句,如果没有给出节日的描述,它会显示没有关于特定节日的信息。如果不是这样的话,我将不得不执行(事件[2]),但对于这一点,它显示了 Traceback (most recent call last): File "C:\Users\kanav_i4cko4c\Downloads\My first tkinter program.py", line 52, in <module> if (event[2]):

你能帮我写代码吗

我想要一个if-else语句,如果没有给出节日的描述,它会显示没有关于特定节日的信息。如果不是这样的话,我将不得不执行
(事件[2])
,但对于这一点,它显示了

Traceback (most recent call last):
  File "C:\Users\kanav_i4cko4c\Downloads\My first tkinter program.py", line 52, in <module>
    if (event[2]):
IndexError: list index out of range

这是主程序的源代码

from tkinter import Tk, Canvas, simpledialog, messagebox
from datetime import date, datetime

# function get_events is to get the celebration events
def get_events():
    list_events = []
    with open('festivals.txt') as file:
          for line in file:
                line1 = line.rstrip('\n')
                global current_event
                current_event = line1.split(',')
                print('Check 0')
                print(current_event)
                current_event[1] = datetime.strptime(current_event[1], '%d/%m/%y').date()
                list_events.append(current_event)
    return list_events


def days_between_dates(date1, date2):   
    time_between = str(date1 - date2)
    number_of_days = time_between.split(' ')
    return number_of_days[0]

# End of Functions
# -----------------------------------------------------------------------------------------------
# Main program starts here

root = Tk()
root.title('Calendar')

c = Canvas(root, width=2000, height=800, bg='dark blue')
c.pack()
c.create_text(100, 50, anchor='w', fill='white', font=' Times 40 bold underline',
              text='My Countdown Calendar')
c.create_rectangle(30, 10, 60, 1000,
            outline="#fb0", fill="#fb0")

events = get_events()
today = date.today()

# Make a dictionary for the festivals



vertical_space = 100
events.sort(key=lambda x: x[1])
horizontal_space = 100

for event in events:
    event_name = event[0]
    days_until = days_between_dates(event[1], today)
    if (event[2]):
        display = 'It is %s days until %s. %s =  %s' % (days_until, event_name, event_name,event[2])
    else:
        display = 'It is %s days until %s. There is no info on %s' % (days_until, event_name, event_name)
    if (int(days_until) <= 50):
        text_col = '#c11a2b'
    else:
        text_col = 'SkyBlue1'
    c.create_text(100, vertical_space, anchor='w', fill=text_col,
                    font='Calibri 28 bold', text=display)
    vertical_space = vertical_space + 30
    horizontal_space = horizontal_space + 40


从tkinter导入Tk、Canvas、simpledialog、messagebox
从日期时间导入日期,日期时间
#get_events的功能是获取庆祝活动
def get_事件():
列出事件=[]
打开('festival.txt')作为文件:
对于文件中的行:
line1=line.rstrip('\n')
全球当前事件
当前_事件=line1.split(',')
打印('检查0')
打印(当前事件)
当前_事件[1]=datetime.strtime(当前_事件[1],“%d/%m/%y”).date()
列出\u事件。追加(当前\u事件)
返回列表\u事件
定义日期之间的天数(日期1、日期2):
时间间隔=str(日期1-日期2)
天数=分割之间的时间(“”)
返回天数为天[0]
#功能结束
# -----------------------------------------------------------------------------------------------
#主程序从这里开始
root=Tk()
root.title('日历')
c=画布(根,宽=2000,高=800,背景为深蓝色)
c、 包()
c、 创建文本(100,50,锚定为w',填充为白色,字体为“乘以40粗体下划线”,
text='My Countdown Calendar')
c、 创建矩形(30、10、60、1000、,
大纲=“#fb0”,填充=“#fb0”)
事件=获取事件()
今天=日期。今天()
#为节日编一本字典
垂直空间=100
events.sort(key=lambda x:x[1])
水平空间=100
对于事件中的事件:
事件名称=事件[0]
截止日期=日期之间的日期(事件[1],今天)
如果(事件[2]):
显示='距离%s还有%s天。%s=%s%%(截止日期、事件名称、事件名称、事件[2])
其他:
display='距离%s还有%s天。%s“%”(截止日期、事件名称、事件名称)上没有任何信息

当您计算
事件[2]
时,如果(int(days_-until),它会尝试检索列表中不存在的第三项,因此python会引发异常

一种解决方案是使用默认值初始化列表:

event = [None for i in range(3)]
这样,在
事件[2]
处有一个
None
值,可以通过if语句对其进行计算

另一种解决方案可以是简单地检查列表是否包含少于3项:

if len(event) <= 2:
    # do something

if len(event)
event=[None for i in range(3)]
也可以写成
event=[None]*3
@ILoveHistory不客气!如果我能帮助你,请标记为已解决=]
if len(event) <= 2:
    # do something