Gibt es eine schönere Art und Weise folgendes tun:Verschachtelte Try-Anweisungen in Python?
try:
a.method1()
except AttributeError:
try:
a.method2()
except AttributeError:
try:
a.method3()
except AttributeError:
raise
Es sieht ziemlich böse und ich möchte lieber nicht tun:
if hasattr(a, 'method1'):
a.method1()
else if hasattr(a, 'method2'):
a.method2()
else if hasattr(a, 'method3'):
a.method3()
else:
raise AttributeError
maximale Effizienz zu erhalten.
Haben Sie Ihre Theorie getestet, dass die zweite Option ineffizient ist? Es würde mich überraschen, wenn es nicht effizienter wäre als das erste. – Oddthinking
Oddthinking ist wahrscheinlich korrekt. Mit hasattr entfällt die Notwendigkeit, eine Ausnahme auszulösen. –
Tatsächlich ruft die Implementierung von hasattr() im Wesentlichen nur getattr() auf und gibt False zurück, wenn eine Ausnahme ausgelöst wird; siehe http://svn.python.org/view/python/tags/r254/Python/bltinmodule.c?view = markup – Miles