По крайней мере, когда речь идет только о том, что происходит в программе, исключая человеческую часть читабельности и т. Д. (Что на самом деле в большинстве случаев более важно, чем производительность (по крайней мере, в этом случае - с такой производительностью span), как указал Рои Адлер и другие).
Тем не менее, глядя на это с этой точки зрения,
тогда становится вопросом выбора между
try: getattr(obj, attr)
except: ...
и
try: obj.attr
except: ...
, поскольку hasattr
просто использует первый случай для определения результата.
Пища для размышлений; -)