Python datetime.strptime 似乎接受了无效长度的输入

Python datetime.strptime seems to accept input with an invalid length

我希望能够对 python

中的 datetime.strptime() 执行非常严格的验证

Python datetime.strptime 似乎正在接受格式不正确的值,而不是引发异常(并尝试从容地解析它们)。

示例:

print datetime.strptime('201013112', '%Y%m%d%H%M')

预期输出: ValueError: ...

实际输出: 2010-01-31 01:02:00

有没有办法使验证非常严格(在此特定示例中,我希望长度匹配 YYYYMMDDHHMM 格式)(或者可能是库替代方案)。 由于格式不固定,我无法自己添加长度检查。

您的数据很乱。这是一个混乱的解决方案。首先创建一个将每个格式代码映射到长度的字典,然后定义一个函数,该函数在尝试解析为 datetime:

之前针对预期长度进行测试
from datetime import datetime

a = '201013112'
form = '%Y%m%d%H%M'

form_lens = {'Y': 4, **dict.fromkeys('mdHM', 2)}

def conv_str(x, form):
    if len(x) != sum(map(form_lens.get, form.replace('%', ''))):
        raise ValueError("Length of input inconsistent with format supplied")
    return datetime.strptime(x, form)

conv_str(a, form)  # ValueError: Length of input inconsistent with format supplied

长度来自Python's strftime directives。你应该检查你的期望是否符合这个参考。