如何将用户输入定义为dd / mm / yyyy和错误句柄输入?

时间:2018-02-11 23:18:37

标签: python python-3.x

我无法将用户输入变量DOB编码为while循环,如果用户没有输入dob,则显示错误,如dd / mm / yyyy

有什么建议吗?

import datetime

while True :
    DOB = input('Date of Birth ')
    try :
        DOB = datetime.datetime.strptime(DOB, "%d//%m//%Y")
    except ValueError:
        print ('Error, Please try again')
    else:
        print("Error: must be format dd/mm/yyyy ")
        userkey = input("press 1 to try again or 0 to exit:")
        if userkey == "1":
            header()
        else:
            sys.exit

2 个答案:

答案 0 :(得分:1)

您将输入保存为变量DOB,但在使用week内的给定格式进行测试时使用变量datetime.datetime.strptime

DOB = input('Date of Birth ')
DOB = datetime.datetime.strptime(week, "%d//%m//%Y")  

所以,你可以这样做:

DOB = datetime.datetime.strptime(DOB, "%d/%m/%Y")  

另外,将日期时间格式说明符设为%d/%m/%Y,中间没有多余的/

另一件事是,您尚未导入sys但最后使用了sys.exit。所以你需要:

  • import sys
  • 在功能调用中使用所需的退出状态,例如对于退出状态sys.exit(0)0(当没有给出整数时,默认值为0 BTW)(表示成功,其他任何表示失败:通常在1-255之间)。只是做sys.call指的是函数对象,不称它为

作为旁注,由于DOB不是常数,您应该将其设为 snake_case ,例如:

date_of_birth = input('Date of Birth ')

答案 1 :(得分:0)

这里有很多错误。如果我看起来绝对是消极的话,请耐心等待。

DOB = datetime.datetime.strptime(week, "%d//%m//%Y")

期望输入字符串位于week,但input()调用实际上将其分配给DOB。所以你会得到NameError: name 'week' is not defined。并且您已使用加倍斜杠%d//%m//%Y指定了日期格式,就像需要转义斜杠一样,但它们不是,所以您要求用户输入12//02//2018没有用户可能会猜测,特别是因为你的错误提示没有说出来。

接下来,您有try..except..else。这并不是你认为它做的事情。来自tutorial

  

try ... except语句有一个可选的else子句,当存在时,必须遵循所有except子句。它对代码很有用   如果try子句没有引发异常,则必须执行该命令。

换句话说,即使用户 成功输入"有效" date,double slashes等等,您的代码会发出消息Error: must be format dd/mm/yyyy

之后,如果用户发出错误并按1再试一次,您的异常处理程序将调用header(),这不存在,因此程序将失败。如果用户按0,您的异常处理程序会尝试调用sys.exit(),但没有import sys,因此也会获得NameError。如果即使使用import sys,它仍然不能做你想要的,因为你省略了parens。如果没有它们,您命名该函数,而不是调用它。

最后,你有一个while True循环但你永远不会退出它,即使用户确实输入了一个有效的日期。

修复所有这些问题后,代码如下所示:

import datetime
import sys

while True :
    DOB = input('Date of Birth ')
    try :
        DOB = datetime.datetime.strptime(DOB, "%d/%m/%Y")
        break
    except ValueError:
        print("Error: must be format dd/mm/yyyy ")
        userkey = input("press 1 to try again or 0 to exit:")
        if userkey == "0":
            sys.exit()

print (f"DOB is {DOB}")