继续在日期时间 Python 中不起作用

Continue Does Not Work in Python with datetime

我正在尝试编写一个程序来打印两个给定日期之间的所有星期二,并排除劳动节和感恩节假期。然而,当我使用继续跳转时,它打破了循环。

import datetime

def getDates():
     StartDate = datetime.datetime(2020, 1, 1)
     EndDate = datetime.datetime(2020, 12, 31)
     LaborDay = datetime.datetime(2020, 9, 7)
     Thanksgiving_Start = datetime.datetime(2020, 11, 23)
     Thanksgiving_End = datetime.datetime(2020, 11, 28)
     CurrentDate = StartDate
     days = int((EndDate - StartDate).days)
     print(StartDate.strftime("%Y-%m-%d"))
     for NextDate in range(days):
          NextDate = CurrentDate + datetime.timedelta(days=7)
          if NextDate == LaborDay:
               continue
          if Thanksgiving_Start <= NextDate <= Thanksgiving_End:
               continue
          if NextDate > EndDate:
               break
          print(NextDate.strftime("%Y-%m-%d"))
          CurrentDate = NextDate

 getDates()

如果您使用 print(),您会看到 continue 正在按预期工作。

def getDates():
     StartDate = datetime.datetime(2020, 1, 1)
     EndDate = datetime.datetime(2020, 12, 31)
     LaborDay = datetime.datetime(2020, 9, 7)
     Thanksgiving_Start = datetime.datetime(2020, 11, 23)
     Thanksgiving_End = datetime.datetime(2020, 11, 28)
     CurrentDate = StartDate
     days = int((EndDate - StartDate).days)
     print(StartDate.strftime("%Y-%m-%d"))
     for NextDate in range(days):
          NextDate = CurrentDate + datetime.timedelta(days=7)
          if NextDate == LaborDay:
              #labor day is in day 7 from septemeber, this day is not multiple of seven
              #starting from StartDate, so it is impossible that is going to evaluate
              # to true
              print("Continue is working first statement")
              continue
          if Thanksgiving_Start <= NextDate <= Thanksgiving_End:
              print("Continue is working second statment")
              continue
          if NextDate > EndDate:
               break
          print(NextDate.strftime("%Y-%m-%d"))
          CurrentDate = NextDate
         

getDates()

问题是一旦遇到第二种情况,就没有设置CurrentDate

实际上,您正在混合两种不同的更改方式NextDate。它由范围内的循环设置,但随后立即设置为与 CurrentDate 相关的值。选择一个并坚持下去;否则你一定会 运行 陷入混乱。

例如,在这里您可以将 for 的外观更改为 while True 循环(或更好:while NextData <= EndDate);将 NextDate 增加 7 天;并从整个程序中删除 CurrentDate

这样应该更容易推理。