आप अक्सर सुनते हैं कि पायथन एलबीवाईएल शैली (" आप छलांग लगाने से पहले देखो ") पर ईएएफपी शैली (" अनुमति की तुलना में माफी मांगना आसान है") को प्रोत्साहित करते हैं। मेरे लिए, यह दक्षता और पठनीयता की बात है।
आपके उदाहरण में (यह कहें कि किसी सूची या खाली स्ट्रिंग को वापस करने के बजाय, फ़ंक्शन को एक सूची या वापस लौटना था None
), यदि आप उम्मीद करते हैं कि 99% समय result
में वास्तव में कुछ चलने योग्य होगा, तो मैं try/except
दृष्टिकोण का उपयोग करूंगा । यह तेजी से होगा अगर अपवाद वास्तव में असाधारण हैं। अगर result
है None
, समय की 50% से अधिक तो का उपयोग कर if
शायद बेहतर है।
कुछ मापों के साथ इसका समर्थन करने के लिए:
>>> import timeit
>>> timeit.timeit(setup="a=1;b=1", stmt="a/b") # no error checking
0.06379691968322732
>>> timeit.timeit(setup="a=1;b=1", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.0829463709378615
>>> timeit.timeit(setup="a=1;b=0", stmt="try:\n a/b\nexcept ZeroDivisionError:\n pass")
0.5070195056614466
>>> timeit.timeit(setup="a=1;b=1", stmt="if b!=0:\n a/b")
0.11940114974277094
>>> timeit.timeit(setup="a=1;b=0", stmt="if b!=0:\n a/b")
0.051202772912802175
इसलिए, जबकि एक if
बयान में हमेशा आपकी लागत होती है, यह एक try/except
ब्लॉक स्थापित करने के लिए लगभग मुफ्त है । लेकिन जब Exception
वास्तव में होता है, तो लागत बहुत अधिक होती है।
नैतिक:
- यह पूरी तरह से ठीक है (और "पायथोनिक")
try/except
प्रवाह नियंत्रण के लिए उपयोग करने के लिए,
- लेकिन यह समझ में आता है जब
Exception
वास्तव में असाधारण हैं।
पायथन डॉक्स से:
EAFP
अनुमति की तुलना में क्षमा मांगना आसान है। यह सामान्य पायथन कोडिंग शैली वैध कुंजी या विशेषताओं के अस्तित्व को मानती है और यदि अपवाद गलत साबित होता है तो अपवादों को पकड़ता है। यह साफ और तेज शैली कई try
और except
बयानों की उपस्थिति की विशेषता है
। तकनीक LBYL
शैली के साथ कई अन्य भाषाओं जैसे कि C के विपरीत है ।