Обработка исключений Python - избегайте писать 30+ попыток, кроме блоков

У меня есть словарь, который заполняется из xml. В словаре есть много пар ключ-значение. Я должен заполнить пользовательский объект со значениями из этого словаря. Я хочу поймать исключение, если один ключ в словаре отсутствует или значение не является ожидаемым типом, запишите этот ключ и продолжите выполнение. Есть ли лучший способ, чем окружающая каждая строка с помощью блока try ожидать. Чтобы быть конкретным, я хочу избежать этого синтаксиса, он делает то, что мне нужно, но мне интересно, есть ли более эффективное решение:

try:
    my_object.prop1 = dictionary['key1']
except Exception as e:
    log.write('key1')

try:
    my_object.prop2 = dictionary['key2']
except Exception as e:
    log.write('key2')

try:
    my_object.prop3 = dictionary['key3']
except Exception as e:
    log.write('key3')

....
+3
источник поделиться
2 ответа

Сделайте это программно.

props_keys = {
    'prop1': 'key1'
    'prop2': 'key2',
    'prop3': 'key3'
}

for prop, key in props_keys.iteritems():
    try:
        setattr(myobj, prop, mydict[key])
    except KeyError:
        log(key)
+4
источник
for key, prop in [('key1', 'prop1'), ('key2', 'prop2'), ('key3', 'prop3')]:
    try:
        setattr(my_object, prop, dictionary[key])
    except KeyError:
        log.write(key)

Обратите внимание, что я также использую KeyError здесь; постарайтесь, чтобы ваши пойманные исключения были как можно более конкретными. Если prop1 может повысить свои собственные ошибки, добавьте это в список ожидаемых ошибок.

+4
источник

Посмотрите другие вопросы по меткам или Задайте вопрос