Форум сайта python.su
Недавно столкнулся с такой задачей (спрашивал в джаббере):
def get_user_data(self, key, default = None):
if isinstance(self.user_data, dict):
return self.user_data.get(key, default)
else:
return default
Офлайн
Так генерация KeyError при отсутсвии ключа у user_data должно быть контрактом и не имеет значения что это за объект на самом деле. Иначе это не утка.
Т.е. понимаете, вы хотите обработать исключение (причем любое) на том уровне абстракции, когда вы уже о нем практически ничего не знаете. А это ошибка. Поэтому KeyError как результат __getitem__ должен быть частью интерфейса.
Отредактировано (Окт. 27, 2008 08:44:30)
Офлайн
А если этому классу нужно вернуть другое исключение? КейЕррор возвращается когда ключа нет, А если ключ есть, но (как пример) ресурс недоступен?
Офлайн
iceВ таком случае можно бросать тот же KeyError но с описанием конретной случившийся ошибки.
А если этому классу нужно вернуть другое исключение? КейЕррор возвращается когда ключа нет, А если ключ есть, но (как пример) ресурс недоступен?
Офлайн
Если вы знаете все возможные варианты поведения user_dataЕго может и другой пользователь написать. остановлюсь на контракте.
Офлайн