Dalam Python, saya sering mendengar bahwa lebih baik "meminta maaf" (pengecualian menangkap) daripada "meminta izin" (pemeriksaan jenis / kondisi). Dalam hal menegakkan itik mengetikkan Python, apakah ini
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
lebih baik atau lebih buruk daripada
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
dalam hal kinerja, keterbacaan, "pythonic", atau faktor penting lainnya?
hasattr
diterapkan dengan mencoba / menangkap yang tepat secara internal. Tidak yakin apakah itu benar ... (itu akan bertindak berbeda pada properti, bukan? Mungkin saya memikirkan getattr
..)
hasattr
tidak menggunakan setara C-API getattr
(kembali True
jika berhasil, False
jika tidak), tetapi menangani pengecualian dalam C jauh lebih cepat.