Есть ли лучше способ сделать следующее:Вложенные инструкции try в python?
try:
a.method1()
except AttributeError:
try:
a.method2()
except AttributeError:
try:
a.method3()
except AttributeError:
raise
Это выглядит довольно противно, и я предпочел бы не делать:
if hasattr(a, 'method1'):
a.method1()
else if hasattr(a, 'method2'):
a.method2()
else if hasattr(a, 'method3'):
a.method3()
else:
raise AttributeError
для поддержания максимальной эффективности.
Вы протестировали свою теорию о том, что второй вариант неэффективен? Меня это удивило бы, если бы оно не было более эффективным, чем первое. – Oddthinking
Нечеткое мышление, скорее всего, верно. hasattr устраняет необходимость возбуждения исключения. –
На самом деле реализация hasattr() по сути просто вызывает getattr() и возвращает False, если возникает исключение; см. http://svn.python.org/view/python/tags/r254/Python/bltinmodule.c?view = markup – Miles