[英]Python 3.8.2 | Why does my input doesn't accept my answer even if it's a valid one? (function)
[英]Why doesn't my script accept a valid date as user input?
如果我给它一个日期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)
如果我输入一些不同的日期,这是我得到的 output:
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
年 1 月 12 日以外的任何日期作为有效输入?
01/16/2021
年 1 月 16 日不是有效日期,因为一年只有 12 个月,而不是 16 个月;)。
你的代码应该是这样的:
def print_reports(interactive, aws_account, aws_account_number):
inputDate = input("Enter the date in format 'dd/mm/yyyy': ")
day, month, year = inputDate.split('/')
try:
datetime(int(day), int(month), int(year))
except ValueError as e:
print("Date is not valid.")
return False
print(f"Input date is valid: {inputDate}")
inputDate = datetime.strptime(inputDate,"%d/%m/%Y")
return True
myclient = connect_db()
mydb = myclient["aws_inventories"]
instance_col = mydb["ec2_list_" + inputDate]
while not success:
global success
success = print_reports(interactive, aws_account, aws_account_number)
您要求格式dd/mm/yyyy
。 但是,您输入的(我假设)是mm/dd/yyyy
格式。 如果您尝试以dd/mm/yyyy
格式解析01/18/2021
,那么您会得到它是 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)
请注意,您似乎使用的是dd/mm/yyyy
格式的 function datetime
时间,但您在原始代码中使用的是带有datetime.strptime
的mm/dd/yyyy
格式。 在此代码中,它仅使用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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.