Как исправить повышение ValueError («Неизвестный формат строки:», timestr) при импорте Excel, включающего одно из полей, пусто - PullRequest
0 голосов
/ 17 июня 2019

ошибка поля даты, когда ноль с django openpyxl

Я хочу импортировать таблицу Excel, но поля даты одни пустые.

class Drgmt(models.Model):
      date_ori = models.DateTimeField(default=None, null=True, blank=True)


def import(request):
    #Many lines before
    date_ori = dt.datetime.strftime(parse(row_data[19]), '%Y-%m-%d %H:%M:%S')
    #Many lines after

Трассировка (последний вызов был последним):

  File "C:\Users\AppData\Roaming\Python\Python37\site-packages\django\core\handlers\exception.py", l
ine 34, in inner
    response = get_response(request)
  File "C:\Users\AppData\Roaming\Python\Python37\site-packages\django\core\handlers\base.py", line 1
15, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\AppData\Roaming\Python\Python37\site-packages\django\core\handlers\base.py", line 1
13, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Desktop\performance\cuivre\views.py", line 57, in importeradsl date_ori = dt.datetime.strftime(parse(row_data[19]), '%Y-%m-%d %H:%M:%S')
File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site-packages\dateutil\parser\_parser.py", li
ne 1356, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)
  File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site-packages\dateutil\parser\_parser.py", li
ne 648, in parse
    raise ValueError("Unknown string format:", timestr)
ValueError: ('Unknown string format:', 'None')
[18/Jun/2019 08:37:02] "POST /cuivre/ HTTP/1.1" 500 85133

1 Ответ

0 голосов
/ 18 июня 2019

Ну, сообщение об ошибке довольно ясное: вы передаете строку 'None' в качестве аргумента timestr для dateutil.parser.parse(), и анализатор не может явно проанализировать это для даты.

Решение также очевидно: обработать исключение :

def import(request):
    #Many lines before
    try:
        date_ori = parse(row_data[19])
    except ValueError as e:
        # what you want to do here depends on your app's specs and rules...
        # you could return an error response, or skip the row and
        # just display a warning, etc etc
        do_something_with_the_exception_here()
    else:
        date_ori = dt.datetime.strftime(date_ori, '%Y-%m-%d %H:%M:%S')
    #Many lines after
...