Как поймать IllegalMonthError - PullRequest
       28

Как поймать IllegalMonthError

0 голосов
/ 28 марта 2020

Я пытаюсь разобрать даты из текста, где дата может быть в любом формате. Я использую dateutil.parser.parse с fuzzy=True аргументом. Но иногда я получаю следующую ошибку:

>>> dateutil.parser.parse("20, 2019", fuzzy=True)
Traceback (most recent call last)
/usr/local/lib/python3.6/site-packages/dateutil/parser/_parser.py in parse(self, timestr, default, ignoretz, tzinfos, **kwargs)
    654         try:
--> 655             ret = self._build_naive(res, default)
    656         except ValueError as e:

/usr/local/lib/python3.6/site-packages/dateutil/parser/_parser.py in _build_naive(self, res, default)
   1237 
-> 1238             if cday > monthrange(cyear, cmonth)[1]:
   1239                 repl['day'] = monthrange(cyear, cmonth)[1]

/usr/lib64/python3.6/calendar.py in monthrange(year, month)
    122     if not 1 <= month <= 12:
--> 123         raise IllegalMonthError(month)
    124     day1 = weekday(year, month, 1)

IllegalMonthError: bad month number 20; must be 1-12

Я не могу найти способ перехватить это исключение.

1 Ответ

0 голосов
/ 28 марта 2020

Dateutil использует модуль calendar, который в первую очередь вызывает исключение. Таким образом, решение состоит в том, чтобы импортировать его и поймать:

import calendar
import dateutil

try:
    dateutil.parser.parse("20, 2019", fuzzy=True)
except calendar.IllegalMonthError:
    print("Caught")

Пойманный

...