Trong Python, tôi thường nghe rằng tốt hơn là "cầu xin sự tha thứ" (bắt ngoại lệ) thay vì "xin phép" (kiểm tra loại / điều kiện). Liên quan đến việc thực thi gõ vịt trong Python, đây có phải là
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
tốt hơn hoặc xấu hơn
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
về hiệu suất, khả năng đọc, "pythonic", hoặc một số yếu tố quan trọng khác?
hasattr
được thực hiện với thử / bắt chính xác trong nội bộ. Không chắc chắn nếu đó là sự thật ... (nó sẽ hoạt động khác với các thuộc tính, phải không? Có lẽ tôi đang nghĩ đến getattr
..)
hasattr
không sử dụng tương đương API C getattr
(trả về True
nếu thành công, False
nếu không), nhưng xử lý các ngoại lệ trong C nhanh hơn rất nhiều.