因此,我创建了以下函数,其目的是检查数据是否为YYYY-MM-DD或MM / DD / YYYY格式,并返回相应的值。如果没有返回-1。
from datetime import datetime
def dateValidate(date):
try:
if date != datetime.strptime(date, "%Y-%m-%d").strftime("%Y-%m-%d"):
raise ValueError
return 1
if date == datetime.strptime(date, "%m/%d/%Y").strftime("%m/%d/%Y"):
raise ValueError
return 2
except ValueError:
return -1
但是,它似乎不适用于MM / DD / YY格式。有什么问题的想法吗?
编辑:
import datetime
def validate(date):
try:
if date != datetime.datetime.strptime(date, "%Y-%m-%d").strftime("%Y-%m-%d"):
raise ValueError
return 1
except ValueError:
return -1
try:
if date == datetime.datetime.strptime(date, "%m/%d/%Y").strftime("%m/%d/%Y"):
raise ValueError
return 2
except ValueError:
return -1
这将返回-1
的{{1}}。
答案 0 :(得分:3)
只需尝试每个datetime.strptime并分别捕获每个错误。
def dateValidate(date):
try:
datetime.strptime(date, "%Y-%m-%d")
return 1
except ValueError:
try:
datetime.strptime(date, "%m/%d/%Y")
return 2
except ValueError:
return -1
答案 1 :(得分:0)
试错并不是真正的坏方法,但是您应该在这里想知道实际发生什么。
datetime.strptime(string, format)
返回一个datetime
值,或者提高一个ValueError
。因此,除非您打算测试标准库,否则用strftime
转换回字符串是没有用的。
在返回之后(在if
的同一分支中)添加代码是没有用的,因为在return
之后,该函数只是返回到其调用者。
因此,您必须使用try: except
来测试格式,然后在try块中返回(如果达到返回值,则表示格式正确),然后在第一个迭代中使用新的try: except:
除了块:
def dateValidate(date):
try:
_ = datetime.strptime(date, "%Y-%m-%d")
return 1
except ValueError:
try:
_ = datetime.strptime(date, "%m/%d/%Y")
return 2
except ValueError:
return -1