В Python я часто слышу, что лучше «просить прощения» (перехват исключений), а не «спрашивать разрешение» (проверка типа / условия). Что касается принудительного набора утки в Python, это try: x = foo.bar except AttributeError: pass else: do(x) лучше или хуже чем if hasattr(foo, "bar"): do(foo.bar)...