Каков наилучший способ обработки вложенной проверки AttributeError try / catch? - PullRequest
0 голосов
/ 13 марта 2019

Вот мой код:

try:
    entry_date = entry.updated_date
except AttributeError:
    try:
        entry_date = entry.published_date
    except AttributeError:
        entry_date = manual_parse_from_string(entry)

В этом сценарии я разбираю фид и пытаюсь получить дату. RSS поставляется с updated_date, published_date или датой в строковом формате, которые требуют дальнейшей обработки в объект DateTime. У меня есть ощущение, что это можно сделать другим способом, например, в этом псевдокоде:

entry_date = entry.updated_date
or
entry.published_date or manual_parse_from_string(entry)

Ничто из этого не кажется мне правильным. Как лучше всего это сделать?

Ответы [ 2 ]

3 голосов
/ 13 марта 2019

В этом конкретном случае вы можете использовать getattr со значением None по умолчанию:

entry_date = (getattr(entry, 'updated_date', None)
              or getattr(entry, 'published_date', None)
              or manual_parse_from_string(entry))
0 голосов
/ 13 марта 2019

Гомогенизируйте ваши различные геттеры в единообразные вызываемые объекты и повторяйте их:

from operator import attrgetter

getters = attrgetter('updated_date'), attrgetter('published_date'), manual_parse_from_string

for getter in getters:
    try:
        entry_date = getter(entry)
    except AttibuteError:
        pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...