Форум сайта python.su
Доброе время суток. Подскажите пожалуйста изящное решение для обработки AttributeError, чтобы вместо него выскакивало своё исключение (MissmatchError). Идет специально вызов метода b , которого нет в классе, на который срабатывает AttributeError: ‘School’ object has no attribute ‘b’. Нужно заменить вывод на свой MissmatchError. Пробовал различные варианты с try-except, захватывая вплоть до всего кода, но всё равно не выходит. Заранее благодарю.
Имеется:
class MismatchError(Exception): pass class School: list = [1,2,3] def __init__(self, name: str): self.name = name def a(self, wizard): self.wizard = wizard
Отредактировано igor110 (Ноя. 26, 2017 20:10:12)
Офлайн
Как-то так:
class MismatchError(Exception): pass class School: list = [1, 2, 3] def __init__(self, name: str): self.name = name def a(self, wizard): self.wizard = wizard if __name__ == '__main__': school = School('School') method = getattr(school, 'b', None) if method is None: raise MismatchError('Message') method()
class Test: lst = [1, 2, 3] test1 = Test() test1.lst.append(4) print(test1.lst) test2 = Test() print(test2.lst)
Отредактировано Stright (Ноя. 26, 2017 21:36:47)
Офлайн
Stright, спасибо за ответ.
в реале у меня список не list называется, это я для удобства тут обозначил. И да, в условии так и должно быть, что к этому листу можно обращаться не через объект, это переменная класса.
В одном из тестов идет вызов несуществующего метода класса, и в ответе - свой MissmatchError , а не AtributeError. Думал опечатка, а нет, так и хотят в условии. Сам код проходит тесты на правильные методы. но вот этот тест пока не могу пройти.
Офлайн
>>> class MismatchError(Exception): pass ... >>> class School: ... def __init__(self): ... self.a = 1 ... def __getattr__(self, attr): ... raise MismatchError("1111") ... >>> a = School() >>> a.a 1 >>> a.b Traceback (most recent call last): File "<input>", line 1, in <module> a.b File "<input>", line 5, in __getattr__ raise MismatchError("1111") MismatchError: 1111
Офлайн