Чистая обработка ElementTree - объект 'NoneType' не имеет атрибута 'attrib' - PullRequest
0 голосов
/ 16 октября 2018

Я работаю с довольно динамичным входящим потоком XML.Я читаю в XML, добавляю найденные значения в список словарей, а затем использую execute many для добавления словарей в БД.

Входящий XML не всегда может содержать значения, поступающие в БД.Сегодня я использую большое количество попробовать / кроме.Я также посмотрел на присвоение значения <.find> переменной, а затем проверял эту переменную на значение if not null при добавлении в словарь.

Оба эти решения выглядят довольно некрасиво и напоминают тяжелый шаблонный код.Есть ли лучшие практики / стандарты?

Ниже приведены несколько идей, с которыми я играю:

Функция для обработки, если элемент пуст или атрибут отсутствует:

def lookup(elm, path_to_elm, attrib_name):
    return_value = elm.find(path_to_elm)
    if return_value is not None:
        return return_value.attrib.get(attrib_name, ("No Attribute: ", attrib_name))
    else:
        return_value = ("No Element", path_to_elm, " in Element ", elm)
        return return_value

также смотрит на короткие замыкания:

print root.find('./path/to/elm') or ElmTree.Element('')).attrib.get('Desired_Attribute',"")
...