আপনি প্রায়শই শুনেন যে পাইথন ইএএফপি শৈলীতে উত্সাহ দেয় ("অনুমতি চেয়ে ক্ষমা চাওয়া সহজ") ("আপনি লাফানোর আগে দেখুন")। আমার কাছে এটি দক্ষতা এবং পঠনযোগ্যতার বিষয়।
আপনার উদাহরণে (বলুন যে কোনও তালিকা বা খালি স্ট্রিংয়ের পরিবর্তে ফাংশনটি একটি তালিকা ফেরত দেবে বা 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 শৈলীর সাথে বিপরীতে রয়েছে ts