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。你应该检查你的期望是否符合这个参考。
我希望能够对 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。你应该检查你的期望是否符合这个参考。