为什么elif在我的Python示例中不起作用?

为什么elif在我的Python示例中不起作用?,python,if-statement,Python,If Statement,我已经阅读了关于这个主题的其他几个问题,我的识别似乎是正确的,我真的不明白为什么下面的代码不起作用 import datetime def validate(date_text): if datetime.datetime.strptime(date_text, '%Y-%m-%d'): print('format is YMD') elif datetime.datetime.strptime(date_text, '%Y-%d-%m'): print('format

我已经阅读了关于这个主题的其他几个问题,我的识别似乎是正确的,我真的不明白为什么下面的代码不起作用

import datetime
def validate(date_text):
  if datetime.datetime.strptime(date_text, '%Y-%m-%d'):
    print('format is YMD')
  elif datetime.datetime.strptime(date_text, '%Y-%d-%m'):
    print('format is YDM')
  elif datetime.datetime.strptime(date_text, '%d-%m-%Y'):
    print('format is DMY')
  elif datetime.datetime.strptime(date_text, '%m-%d-%Y'):
    print('format is MDY')
  else:
    print('other')

validate('2003-12-23') 
这很有效

validate('2003-23-12') 
这不行!我得到以下错误:

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-45-d6fe5c34e65c> in <module>()
----> 1 validate('2003-23-12')

2 frames

/usr/lib/python3.7/_strptime.py in _strptime(data_string, format)
    357     if not found:
    358         raise ValueError("time data %r does not match format %r" %
--> 359                          (data_string, format))
    360     if len(data_string) != found.end():
    361         raise ValueError("unconverted data remains: %s" %

ValueError: time data '2003-23-12' does not match format '%Y-%m-%d'
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1验证('2003-23-12')
2帧
/usr/lib/python3.7//u strptime.py in.\u strptime(数据字符串,格式)
357如果未找到:
358 raise VALUERROR(“时间数据%r与格式%r不匹配”%
-->359(数据字符串,格式))
360 if len(数据字符串)!=已找到。结束()
361 raise VALUE ERROR(“未转换的数据剩余:%s”%
ValueError:时间数据“2003-23-12”与格式“%Y-%m-%d”不匹配

提前感谢您的帮助,我真的不明白为什么它不起作用!我的标识似乎是正确的。

这是因为您在本月发送了23个。可能只是捕获错误并返回false。

strtime
失败时,它不会返回错误值,它会引发异常,从而阻止任何进一步的代码执行,除非你用
try.。除了ValueError
…啊,我明白你的意思了,谢谢!请注意,这段代码从根本上被破坏了,无论如何-1/3的时间,天数在几个月的有效范围内,所以你不可能区分YMD和YDM。是的,我知道这一点,谢谢