如果给我一个日期为的脚本,它将可以正常工作01/12/2021
。但是,如果我给它另一个像今天这样的日期01/18/2021
或其他日期,脚本会说该日期无效,并提示用户再次输入该日期。
def print_reports(interactive,aws_account,aws_account_number):
inputDate = input("Enter the date in format 'dd/mm/yyyy': ")
day,month,year = inputDate.split('/')
isValidDate = True
try:
datetime(int(year),int(month),int(day))
except ValueError :
isValidDate = False
print("Date is not valid.")
print_reports(interactive,aws_account,aws_account_number)
if(isValidDate) :
print(f"Input date is valid: {inputDate}")
format= "%m%d%Y"
inputDate = datetime.strptime(inputDate,"%m/%d/%Y")
inputDate = inputDate.strftime(format)
else:
print(f"Input date is not valid: {inputDate}")
print_reports(interactive,aws_account,aws_account_number)
myclient = connect_db()
mydb = myclient["aws_inventories"]
instance_col = "ec2_list_" + inputDate
instance_col = mydb[instance_col]
print_reports(interactive,aws_account,aws_account_number)
这是我输入不同日期后得到的输出:
Enter the date in format 'dd/mm/yyyy': 01/12/2021
Input date is valid: 01/12/2021
Enter the date in format 'dd/mm/yyyy': 01/13/2021
Date is not valid.
Enter the date in format 'dd/mm/yyyy': 01/14/2021
Date is not valid.
Enter the date in format 'dd/mm/yyyy': 01/15/2021
Date is not valid.
Enter the date in format 'dd/mm/yyyy': 01/16/2021
Date is not valid.
为什么我的脚本不接受除01/12/2021
有效输入以外的任何日期?
您正在要求格式dd/mm/yyyy
。但是,您正在输入(按照我的假设)mm/dd/yyyy
格式。如果尝试01/18/2021
使用format进行解析,dd/mm/yyyy
则会得到结果是2021年第18个月的第一天(当然,这是不可能的-一年中只有12个月)。要解决此问题,您将不得不将格式更改为mm/dd/yyyy
或输入为18/01/2021
。
要将输入检查器更改为mm/dd/yyyy
:
def print_reports(interactive, aws_account, aws_account_number):
inputDate = input("Enter the date in format 'mm/dd/yyyy': ")
month, day, year = inputDate.split('/') # changed order of month and day
isValidDate = True
try:
datetime(int(year), int(month), int(day))
except ValueError:
isValidDate = False
print("Date is not valid.")
print_reports(interactive, aws_account, aws_account_number)
if isValidDate:
print(f"Input date is valid: {inputDate}")
format = "%m%d%Y"
inputDate = datetime.strptime(inputDate,"%m/%d/%Y")
inputDate = inputDate.strftime(format)
else:
print(f"Input date is not valid: {inputDate}")
print_reports(interactive,aws_account,aws_account_number)
myclient = connect_db()
mydb = myclient["aws_inventories"]
instance_col = "ec2_list_" + inputDate
instance_col = mydb[instance_col]
print_reports(interactive,aws_account,aws_account_number)
请注意,它看起来像您使用的是功能datetime
与dd/mm/yyyy
形式,但你正在使用的mm/dd/yyyy
格式与datetime.strptime
原代码。在此代码中,它仅使用mm/dd/yyyy
格式,但是您始终可以轻松地将其编辑为dd/mm/yyyy
。
编辑:看起来您正在使用递归。当然,相反,您应该使用while
循环,因为这里不需要递归。另外,您正在使用该isValidDate
变量,但实际上从未使用过或不需要使用该变量:
def print_reports(interactive, aws_account, aws_account_number):
while True:
inputDate = input("Enter the date in format 'mm/dd/yyyy': ")
month, day, year = inputDate.split('/') # changed order of month and day
try:
datetime(int(year), int(month), int(day))
except ValueError:
print("Date is not valid.")
continue
print(f"Input date is valid: {inputDate}")
format = "%m%d%Y"
inputDate = datetime.strptime(inputDate,"%m/%d/%Y")
inputDate = inputDate.strftime(format)
myclient = connect_db()
mydb = myclient["aws_inventories"]
instance_col = "ec2_list_" + inputDate
instance_col = mydb[instance_col]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句