[英]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.