c'è un modo più bello di fare quanto segue:Dichiarazioni di prova nidificate in python?
try:
a.method1()
except AttributeError:
try:
a.method2()
except AttributeError:
try:
a.method3()
except AttributeError:
raise
Sembra piuttosto brutto e non preferirei fare:
if hasattr(a, 'method1'):
a.method1()
else if hasattr(a, 'method2'):
a.method2()
else if hasattr(a, 'method3'):
a.method3()
else:
raise AttributeError
per mantenere la massima efficienza.
Hai messo alla prova la tua teoria secondo cui la seconda opzione è inefficiente? Mi sorprenderebbe se non fosse più efficiente del primo. – Oddthinking
Probabilmente è probabile che lo smantellamento sia corretto. hasattr elimina la necessità di sollevare un'eccezione. –
In realtà, l'implementazione di hasattr() essenzialmente chiama getattr() e restituisce False se viene sollevata un'eccezione; vedi http://svn.python.org/view/python/tags/r254/Python/bltinmodule.c?view = markup – Miles