我无法将用户输入变量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
答案 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}")