Python datetime.strptime, кажется, принимает ввод с недопустимой длиной - PullRequest
0 голосов
/ 02 октября 2018

Я хочу иметь возможность применять очень строгую проверку для datetime.strptime() в python

Python datetime.strptime, кажется, принимает значения, которые неправильно отформатированы, вместо вызова исключения (и пытается их мягко проанализировать)).

Пример:

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

Ожидаемый результат: ValueError: ...

Фактический результат: 2010-01-31 01:02:00

Isесть способ сделать проверку чрезвычайно строгой (я хочу, чтобы длина соответствовала формату ГГГГММДДЧЧММ в этом конкретном примере) (или, может быть, альтернатива библиотеке).Я не могу добавить проверку длины самостоятельно, потому что формат не фиксирован.

1 Ответ

0 голосов
/ 02 октября 2018

Ваши данные грязные.Это грязное решение.Сначала создайте словарь, отображающий каждый код формата на длину, затем определите функцию, которая проверяет ожидаемую длину перед тем, как попытаться проанализировать как 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директивы .Вы должны убедиться, что ваши ожидания соответствуют этой ссылке.

...