验证 Python 中一组日期的方法

way to validate a set of dates in Python

我有一组日期,我正在使用以下方法来验证它们。我想确认使用这么多 try-except 块是否是正确的方法,还是有更好的方法?

此外,日期也可以采用其他格式,例如 dd/mm/yyyy,所以我应该包括所有可能的格式还是有更好的方法?

dob="""
10/23/1964
9/14/2010
12-23-98
"""

try:
    date_time= datetime.strptime(dob, '%m/%d/%Y')
except:
       try:
           date_time= datetime.strptime(dob, '%m-%d-%Y')
       except:
              try:
                  date_time= datetime.strptime(dob, '%m/%d/%y')
              except:
                     try:
                         date_time= datetime.strptime(dob, '%m-%d-%y') 
                     except:
                            date_time="invalid date"
print(date_time)

根据@Mad Physicist的要求:

dob = '''
10/23/1964
9/14/2010
12-23-98
'''

def validate(sdatetime):
    for pattern in [
        '%m/%d/%Y',
        '%m-%d-%Y',
        '%m/%d/%y',
        '%m-%d-%y',
    ]:
        try:
            # return upon success
            return datetime.strptime(sdatetime, pattern)
        except ValueError:
            pass
            # handle the error if you want

    return "invalid date"

for line in dob.splitlines():
    if line:
        print(line, validate(line))

原文post:

dob = '''
10/23/1964
9/14/2010
12-23-98
'''

def validate(sdatetime):
    for fn in [
        lambda sdatetime: datetime.strptime(sdatetime, '%m/%d/%Y'),
        lambda sdatetime: datetime.strptime(sdatetime, '%m-%d-%Y'),
        lambda sdatetime: datetime.strptime(sdatetime, '%m/%d/%y'),
        lambda sdatetime: datetime.strptime(sdatetime, '%m-%d-%y'),
        lambda sdatetime: "invalid date"
    ]:
        try:
            # return upon success
            return fn(sdatetime)
        except ValueError:
            pass
            # handle the error if you want

for line in dob.splitlines():
    if line:
        print(line, validate(line))