hasattr () против блока try-Кроме того, чтобы иметь дело с несуществующими атрибутами - PullRequest
76 голосов
/ 24 мая 2009
if hasattr(obj, 'attribute'):
    # do somthing

против

try:
    # access obj.attribute
except AttributeError, e:
    # deal with AttributeError

Что должно быть предпочтительнее и почему?

Ответы [ 12 ]

0 голосов
/ 12 октября 2012

По крайней мере, когда речь идет только о том, что происходит в программе, исключая человеческую часть читабельности и т. Д. (Что на самом деле в большинстве случаев более важно, чем производительность (по крайней мере, в этом случае - с такой производительностью span), как указал Рои Адлер и другие).

Тем не менее, глядя на это с этой точки зрения, тогда становится вопросом выбора между

try: getattr(obj, attr)
except: ...

и

try: obj.attr
except: ...

, поскольку hasattr просто использует первый случай для определения результата. Пища для размышлений; -)

0 голосов
/ 24 мая 2009

Первый.

Чем короче, тем лучше. Исключения должны быть исключительными.

...