为什么我的脚本不接受有效日期作为用户输入?

蒂姆·邓菲

如果给我一个日期为的脚本,它将可以正常工作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)

请注意,它看起来像您使用的是功能datetimedd/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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Powershell用户输入验证不接受有效输入

来自分类Dev

为什么Eclipse在nextFocusForward中不接受有效的Android ID?

来自分类Dev

自制软件不接受有效选项

来自分类Dev

Hackerrank 不接受有效的解决方案

来自分类Dev

为什么我的脚本不接受字符?

来自分类Dev

JSON.parse()将不接受有效的JSON

来自分类Dev

NSData将不接受有效的base64编码的字符串

来自分类Dev

受密码保护的页面更改密码后不接受有效密码

来自分类Dev

AWS Javascript sdk registerThing模板主体不接受有效的json字符串

来自分类Dev

浏览器不接受有效的加密证书

来自分类Dev

为什么我的脚本不接受命令参数?

来自分类Dev

为什么SED不接受我的输入?

来自分类Dev

为什么我的 Python 脚本不提示用户输入?

来自分类Dev

为什么 SimpleDateFormat 在设计上接受没有字母的字符串作为有效的日期格式?

来自分类Dev

为什么Angular 2不接受此有效的正则表达式

来自分类Dev

为什么我的C ++代码不接受输入?我的代码有什么问题?

来自分类Dev

为什么QComboBox.findData()不接受对象作为输入?

来自分类Dev

为什么我的Java程序不接受用户的字母输入?

来自分类Dev

为什么不接受输入?

来自分类Dev

为什么我的Java扫描仪不接受输入?

来自分类Dev

为什么添加方法不接受我的输入?

来自分类Dev

为什么python不接受我的输入并使用它?

来自分类Dev

使用MVC3中的DataAnnotations验证文本框以仅接受有效的日期时间值

来自分类Dev

为什么此脚本不接受两个参数?

来自分类Dev

为什么该脚本有效?

来自分类Dev

为什么此输入有效

来自分类Dev

为什么我的“ gets”不接受用户输入,而是在注释中打印第一行?

来自分类Dev

为什么使用tcpreplay的脚本不等待用户输入?

来自分类Dev

为什么我的bash版本不接受function关键字?

Related 相关文章

  1. 1

    Powershell用户输入验证不接受有效输入

  2. 2

    为什么Eclipse在nextFocusForward中不接受有效的Android ID?

  3. 3

    自制软件不接受有效选项

  4. 4

    Hackerrank 不接受有效的解决方案

  5. 5

    为什么我的脚本不接受字符?

  6. 6

    JSON.parse()将不接受有效的JSON

  7. 7

    NSData将不接受有效的base64编码的字符串

  8. 8

    受密码保护的页面更改密码后不接受有效密码

  9. 9

    AWS Javascript sdk registerThing模板主体不接受有效的json字符串

  10. 10

    浏览器不接受有效的加密证书

  11. 11

    为什么我的脚本不接受命令参数?

  12. 12

    为什么SED不接受我的输入?

  13. 13

    为什么我的 Python 脚本不提示用户输入?

  14. 14

    为什么 SimpleDateFormat 在设计上接受没有字母的字符串作为有效的日期格式?

  15. 15

    为什么Angular 2不接受此有效的正则表达式

  16. 16

    为什么我的C ++代码不接受输入?我的代码有什么问题?

  17. 17

    为什么QComboBox.findData()不接受对象作为输入?

  18. 18

    为什么我的Java程序不接受用户的字母输入?

  19. 19

    为什么不接受输入?

  20. 20

    为什么我的Java扫描仪不接受输入?

  21. 21

    为什么添加方法不接受我的输入?

  22. 22

    为什么python不接受我的输入并使用它?

  23. 23

    使用MVC3中的DataAnnotations验证文本框以仅接受有效的日期时间值

  24. 24

    为什么此脚本不接受两个参数?

  25. 25

    为什么该脚本有效?

  26. 26

    为什么此输入有效

  27. 27

    为什么我的“ gets”不接受用户输入,而是在注释中打印第一行?

  28. 28

    为什么使用tcpreplay的脚本不等待用户输入?

  29. 29

    为什么我的bash版本不接受function关键字?

热门标签

归档