পাইথনে "ইএএফপি নীতি ব্যবহার করে" বলতে কী বোঝায়? আপনি কোন উদাহরণ দিতে পারেন?
পাইথনে "ইএএফপি নীতি ব্যবহার করে" বলতে কী বোঝায়? আপনি কোন উদাহরণ দিতে পারেন?
উত্তর:
শব্দকোষ থেকে :
অনুমতি চেয়ে ক্ষমা চাইতে সহজ। এই সাধারণ পাইথন কোডিং শৈলীটি বৈধ কী বা বৈশিষ্ট্যগুলির অস্তিত্ব ধরে নিয়েছে এবং যদি অনুমানটি মিথ্যা প্রমাণিত হয় তবে ব্যতিক্রমগুলি ধরবে। এই পরিষ্কার এবং দ্রুত শৈলীটি অনেকের উপস্থিতি
try
এবংexcept
বিবৃতি দ্বারা চিহ্নিত করা হয় । কৌশলটি সি অন্যান্য হিসাবে অনেক অন্যান্য ভাষায় সাধারণ LBYL শৈলীর সাথে বিপরীতে রয়েছে ts
একটি উদাহরণ হ'ল একটি অভিধান কী অ্যাক্সেস করার চেষ্টা।
EAFP:
try:
x = my_dict["key"]
except KeyError:
# handle missing key
LBYL:
if "key" in my_dict:
x = my_dict["key"]
else:
# handle missing key
এলবিওয়াইএল সংস্করণটি অভিধানের ভিতরে কীটি দু'বার অনুসন্ধান করতে হবে এবং এটিকে কিছুটা কম পঠনযোগ্যও বলে মনে করা যেতে পারে।
x
যখন চাবি অস্তিত্ব নেই: x = mydict.get('key')
ফিরে আসবে None
যদি 'key'
নেই my_dict
; আপনি এটি করতেও পারেন .get('key', <something>)
, এবং এরপরে এক্স অভিধানটি নির্দিষ্ট করা হবে যদি অভিধানে কী না থাকে। dict.setdefault()
এবং collections.defaultdict
অতিরিক্ত কোড এড়ানোর জন্য দুর্দান্ত জিনিস।
except KeyError
পাশাপাশি AttributeError
সহজ কিন্তু কিছু খারাপ উদাহরণ। অনেক সময় আমি কোনও ডিবাগ করতে আটকেছিলাম কারণ except AttributeError
ভুল জায়গায় রাখা হয়েছিল, যা ভুল গুণকে ত্রুটিটিকে শৃঙ্খলে আরও গভীর করে তুলে ধরা দেয়। উন্নত উদাহরণ আমি মনে করি আছেন: try: open() ... except: IOError
। বাtry: parseLine() ... except ParseError
আমি এটি অন্য একটি উদাহরণ দিয়ে ব্যাখ্যা করার চেষ্টা করব।
এখানে আমরা ফাইলটি অ্যাক্সেস করার এবং কনসোলে সামগ্রীগুলি মুদ্রণের চেষ্টা করছি।
আমরা ফাইলটি অ্যাক্সেস করতে পারি কিনা তা আমরা যাচাই করতে চাই এবং যদি পারি তবে আমরা এটি খুলব এবং সামগ্রীগুলি মুদ্রণ করব। আমরা যদি ফাইলটি অ্যাক্সেস করতে না পারি তবে আমরা else
অংশটি আঘাত করব । এটি প্রথমে একটি অ্যাক্সেস-চেক করার কারণে এটি একটি রেসের শর্ত হওয়ার কারণ। আমরা পৌঁছানোর সময় with open(my_file) as f:
সম্ভবত কিছু অনুমতি সমস্যার কারণে আমরা এটিকে আর অ্যাক্সেস করতে পারি না (উদাহরণস্বরূপ অন্য প্রক্রিয়াটি একটি এক্সক্লুসিভ ফাইল লক অর্জন করে)। এই কোডটি সম্ভবত একটি ত্রুটি ফেলবে এবং আমরা সেই ত্রুটিটি ধরতে পারব না কারণ আমরা ভেবেছিলাম যে আমরা ফাইলটি অ্যাক্সেস করতে পারি।
import os
my_file = "/path/to/my/file.txt"
# Race condition
if os.access(my_file, os.R_OK):
with open(my_file) as f:
print(f.read())
else:
print("File can't be accessed")
এই উদাহরণে, আমরা কেবল ফাইলটি খোলার চেষ্টা করছি এবং যদি আমরা এটি খুলতে না পারি তবে এটি একটি নিক্ষেপ করবে IOError
। যদি আমরা পারি তবে আমরা ফাইলটি খুলব এবং সামগ্রীগুলি মুদ্রণ করব। সুতরাং কিছু জিজ্ঞাসার পরিবর্তে আমরা এটি করার চেষ্টা করছি । যদি এটি কাজ করে, দুর্দান্ত! যদি এটি না হয় তবে আমরা ত্রুটিটি ধরা এবং এটি পরিচালনা করি।
# # No race condition
try:
f = open(my_file)
except IOError as e:
print("File can't be accessed")
else:
with f:
print(f.read())
আমি এটিকে "আশাবাদী প্রোগ্রামিং" বলি। ধারণাটি হ'ল বেশিরভাগ সময় লোকেরা সঠিক কাজ করবে এবং ত্রুটিগুলি খুব কম হওয়া উচিত। তাই "সঠিক জিনিস" হওয়ার জন্য প্রথমে কোড করুন এবং তারপরে ত্রুটিগুলি যদি তা না করেন তবে তা ধরুন।
আমার অনুভূতিটি হ'ল কোনও ব্যবহারকারী যদি ভুল করে চলেছে তবে তাদের অবশ্যই সময় পরিণতি ভোগ করা উচিত। যে সরঞ্জামগুলি সঠিক উপায়ে ব্যবহার করে তাদের মধ্যে।