处理嵌套try / catch AttributeError检查的最佳方法是什么?

时间:2019-03-13 14:02:27

标签: python exception

这是我的代码:

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_datepublished_date或字符串格式的日期,需要进一步处理到DateTime对象中。我觉得可以用其他方式完成此操作,例如此伪代码:

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

这些都不适合我。最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

在这种情况下,您可以将getattr与默认值None一起使用:

entry_date = (getattr(entry, 'updated_date', None)
              or getattr(entry, 'published_date', None)
              or manual_parse_from_string(entry))

答案 1 :(得分:0)

将您不同的吸气剂均质化为统一的可调用对象,并对其进行迭代:

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