पायथन में, मैं अक्सर सुनता हूं कि "पूछना अनुमति" (टाइप / कंडीशन चेकिंग) के बजाय "भीख माँगना" (अपवाद को पकड़ना) बेहतर है। अजगर में बतख टाइपिंग को लागू करने के संबंध में, यह है
try:
x = foo.bar
except AttributeError:
pass
else:
do(x)
से बेहतर या बुरा
if hasattr(foo, "bar"):
do(foo.bar)
else:
pass
प्रदर्शन, पठनीयता, "पायथोनिक", या कुछ अन्य महत्वपूर्ण कारक के संदर्भ में?
hasattr
आंतरिक रूप से उस सटीक कोशिश / कैच को लागू किया गया है। निश्चित नहीं है अगर यह सच है ... (यह गुणों पर अलग तरह से कार्य करेगा, यह नहीं होगा? शायद मैं सोच रहा हूँ getattr
..)
hasattr
सी-एपीआई के बराबर का उपयोग करता है getattr
( True
यदि सफल हो तो वापसी False
), लेकिन सी में अपवादों को संभालना बहुत तेज़ है।