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