Python - Try Except
tryভলিউম
কার্যকলাপ:ত্রুটির জন্য কোড ব্লক পরীক্ষা করে
কনফিগারেশন: try:
exceptভলিউম
কার্যকলাপ:ত্রুটি হ্যান্ডলিং
কনফিগারেশন: except:
elseভলিউম
কার্যকলাপ:কোন ত্রুটি না থাকলে কোডটি কার্যকর করে
কনফিগারেশন: else:
finallyভলিউম
কার্যকলাপ:ফলাফল নির্বিশেষে কোড নির্বাহ করে
কনফিগারেশন: finally:
ব্যতিক্রম হ্যান্ডলিং
যখন একটি ত্রুটি ঘটে, বা আমরা যাকে ব্যতিক্রম বলি, পাইথন সাধারণত থামে এবং একটি ত্রুটি বার্তা তৈরি করে।
এই ব্যতিক্রমtryবিবৃতি ব্যবহার করে পরিচালনা করা যেতে পারে:
টিপ:
tryযেহেতু মডিউল একটি ত্রুটি উত্থাপন করে,exceptমডিউল সক্রিয় করা হবে।
ব্যতিক্রম হ্যান্ডলিং ছাড়া
# এই বিবৃতিটি একটি ত্রুটি উত্থাপন করবে মুদ্রণ(x) # x সংজ্ঞায়িত করা হয়নি # প্রোগ্রামটি কাজ করা বন্ধ করবে মুদ্রণ ("এই লাইনটি কার্যকর হবে না")
উপসংহার:NameError, প্রোগ্রামটি ক্র্যাশ হবে
ব্যবহারকারীর অভিজ্ঞতা:খারাপ
ব্যতিক্রম হ্যান্ডলিং সঙ্গে
চেষ্টা করুন: মুদ্রণ(x) # x সংজ্ঞায়িত করা হয়নি ছাড়া: মুদ্রণ ("একটি ব্যতিক্রম ঘটেছে") মুদ্রণ ("প্রোগ্রাম স্বাভাবিকভাবে চলতে থাকে")
উপসংহার:"একটি ব্যতিক্রম ঘটেছে", প্রোগ্রামটি চলতে থাকে
ব্যবহারকারীর অভিজ্ঞতা:ভাল
বেসিক ট্রাই ছাড়া
উদাহরণ
tryমডিউলটি একটি ব্যতিক্রম নিক্ষেপ করবে কারণ x অনির্ধারিত:
চেষ্টা করুন: মুদ্রণ(x) # x সংজ্ঞায়িত করা হয়নি ছাড়া: মুদ্রণ ("একটি ব্যতিক্রম ঘটেছে") #কর্মসূচী চলবে প্রিন্ট ("প্রোগ্রাম এক্সিকিউশন চলতে থাকে...")
অপারেটিং ফ্লো:
ধাপ 1: tryব্লক শুরু হয়
ধাপ 2: print(x)বাস্তবায়িত → NameError
ধাপ 3: exceptনিয়ন্ত্রণ মডিউল স্থানান্তর করা হয়
ধাপ 4: print("An exception occurred")বাস্তবায়িত হয়
ধাপ 5: try-exceptঅবরোধের পর কার্যক্রম চলতে থাকে
আউটপুট:
An exception occurred
Program execution continues...
অনেক ব্যতিক্রম
আপনি যদি একটি বিশেষ ধরনের ত্রুটির জন্য কোডের একটি বিশেষ ব্লক চালাতে চান, তাহলে আপনি যত খুশি ব্যতিক্রম ব্লক সংজ্ঞায়িত করতে পারেন:
উদাহরণ
tryএকটি বার্তা প্রিন্ট করুন যদি মডিউলটি একটি NameError উত্থাপন করে, এবং অন্যটি অন্যান্য ত্রুটির জন্য:
চেষ্টা করুন: মুদ্রণ(x) # x সংজ্ঞায়িত করা হয়নি NameError বাদে: মুদ্রণ ("ভেরিয়েবল x সংজ্ঞায়িত নয়") ছাড়া: মুদ্রণ ("অন্য কিছু ভুল হয়েছে")
দ্রষ্টব্য:
আমাদের পাইথন বিল্ট-ইন ব্যতিক্রম রেফারেন্সে আরও ত্রুটির ধরন দেখুন।
নির্দিষ্ট ত্রুটির ধরন
try:
result = 10 / 0
except ZeroDivisionError:
print("Cannot divide by zero!")
except TypeError:
print("Type error occurred!")
except Exception as e:
print(f"Other error: {e}")
সাধারণ পাইথন ত্রুটি
NameError- পরিবর্তনশীল সংজ্ঞায়িত করা হয় নাTypeError- অবৈধ তথ্য প্রকারValueError- অবৈধ মানZeroDivisionError- শূন্য দ্বারা বিভাজনIndexError- সীমার বাইরে ঠিকানাKeyError- কোন শব্দভান্ডার কিFileNotFoundError- ফাইল পাওয়া যায়নি
elseভলিউম
কোনো ত্রুটি উত্থাপিত না হলে কার্যকর করা কোডের একটি ব্লক সংজ্ঞায়িত করুনelseকীওয়ার্ড ব্যবহার করা যেতে পারে:
উদাহরণ
এই উদাহরণে,tryমডিউল কোনো ত্রুটি তৈরি করে না:
try:
print("Hello, World!")
except:
print("Something went wrong")
else:
print("Nothing went wrong - else block executed")
elseমডিউলের উদ্দেশ্য:
শর্ত:যাexceptশুধুমাত্র যদি মডিউলটি সক্রিয় না হয়
আবেদন:সফল অপারেশন জন্য কোড
সুবিধা: tryব্লক থেকে সফল সূচক বিচ্ছিন্ন করে
উদাহরণ:ফাইল সফলভাবে পড়া হয়েছে পরে প্রক্রিয়াকরণ
finallyভলিউম
finallyভলিউম, নির্দিষ্ট করা হলে,tryব্লক একটি ত্রুটি উত্থাপন বা না নির্বিশেষে মৃত্যুদন্ড কার্যকর করা হয়েছে.
উদাহরণ
চেষ্টা করুন: মুদ্রণ(x) # x সংজ্ঞায়িত করা হয়নি ছাড়া: মুদ্রণ ("কিছু ভুল হয়েছে") অবশেষে: মুদ্রণ ("'ট্রাই ছাড়া' শেষ হয়েছে")
সফল আন্দোলন
try:
print("Hello, World!")
except:
print("Something went wrong")
finally:
print("This always executes")
# Output:
# Hello, World!
# This always executes
ত্রুটি সঙ্গে আন্দোলন
try:
print(undefined_variable)
except NameError:
print("Variable not found")
finally:
print("This always executes")
# Output:
# Variable not found
# This always executes
ফাইল ম্যানিপুলেশন সহ একটি বাস্তব উদাহরণ
এটি অবজেক্ট বন্ধ এবং সম্পদ পরিষ্কার করার জন্য দরকারী:
উদাহরণ
একটি অলিখিত ফাইল খোলার এবং লেখার চেষ্টা করুন:
try:
f = open("demofile.txt", "r")
try:
content = f.read()
print("File read successfully")
except:
print("Something went wrong when reading the file")
finally:
f.close()
print("File closed successfully")
except FileNotFoundError:
print("File not found")
except PermissionError:
print("Permission denied")
except Exception as e:
print(f"An error occurred: {e}")
প্রধান সুবিধা:
ফাইল অবজেক্ট না খুলেই প্রোগ্রাম চলতে থাকে।finallyনিশ্চিত করে যে মডিউলটি সর্বদা ফাইলটি বন্ধ করে।
একটি ব্যতিক্রম উত্থাপন
পাইথন বিকাশকারী হিসাবে, আপনি একটি ব্যতিক্রম নিক্ষেপ করতে বেছে নিতে পারেন যখন একটি শর্ত ঘটে।
টিপ:
একটি ব্যতিক্রম নিক্ষেপ (বা বাড়াতে)raiseকীওয়ার্ড ব্যবহার করুন।
উদাহরণ 1: সাধারণ ব্যতিক্রম
x = -1 যদি x <0: ব্যতিক্রম বাড়ান ("দুঃখিত, শূন্যের নিচে কোন সংখ্যা নেই") # প্রোগ্রাম এখানে থামে মুদ্রণ ("এটি প্রিন্ট করা হবে না")
উদাহরণ 2: নির্দিষ্ট ত্রুটির ধরন
x = "হ্যালো" যদি না হয় instance(x, int): TypeError বাড়ান ("শুধুমাত্র পূর্ণসংখ্যা অনুমোদিত") #বা যদি টাইপ(x) int না হয়: TypeError বাড়ান ("শুধুমাত্র পূর্ণসংখ্যা অনুমোদিত")
ব্যবহারকারী-সংজ্ঞায়িত ব্যতিক্রম
ক্লাস InvalidAgeError(ব্যতিক্রম): """বয়স বৈধ না হলে ফেলে দেয়""" পাস def check_age(বয়স): যদি বয়স <0 হয়: Raise InvalidAgeError("বয়স নেতিবাচক হতে পারে না") যদি বয়স 150> Raise InvalidAgeError("বয়স অবাস্তব মনে হচ্ছে") রিটার্ন সত্য # আবেদন চেষ্টা করুন: চেক_বয়স(-5) ই হিসাবে InvalidAgeError বাদে: মুদ্রণ (f"অবৈধ বয়স: {e}")
একটি সম্পূর্ণ চেষ্টা-ব্যতীত-অন্যথা-অবশেষে কাঠামো
def divide_numbers(a, b): চেষ্টা করুন: ফলাফল = a/b জিরোডিভিশন ত্রুটি ছাড়া: মুদ্রণ ("ত্রুটি: শূন্য দিয়ে ভাগ করা যায় না!") কোনটিই ফেরত দাও TypeError ছাড়া: মুদ্রণ ("ত্রুটি: উভয় আর্গুমেন্ট অবশ্যই সংখ্যা হতে হবে!") কোনটিই ফেরত দাও ই হিসাবে ব্যতিক্রম ছাড়া: মুদ্রণ (f"অপ্রত্যাশিত ত্রুটি: {e}") কোনটিই ফেরত দাও অন্য: মুদ্রণ (f"বিভাগ সফল: {a} / {b} = {ফলাফল}") ফেরত ফলাফল অবশেষে: মুদ্রণ("বিভাগ অপারেশন সম্পন্ন হয়েছে (সর্বদা নির্বাহ করে)") # পরীক্ষার উদাহরণ মুদ্রণ ("পরীক্ষা 1:", ভাগ_সংখ্যা(10, 2)) মুদ্রণ("\nপরীক্ষা 2:", ভাগ_সংখ্যা(10, 0)) মুদ্রণ("\nপরীক্ষা 3:", ভাগ_সংখ্যা(10, "দুই"))
স্ট্রাকচার ফ্লো ডায়াগ্রাম:
Start
|
v
try block
|
/\
Success / \ Error
/ \
v v
else except
block block
| |
v v
finally finally
block block
| |
v v
End
অনুশীলন করুন
কtry...exceptব্লকে,tryএকটি নির্দিষ্ট ব্লক আছে যেটি নির্বিশেষে কার্যকর করা হয় যে ব্লকটি একটি ত্রুটি উত্থাপন করে বা না করে। এই মডিউলটির নাম কি?
অনুশীলন প্রশ্ন:
সর্বোত্তম অনুশীলন
except:এড়িয়ে চলুন এবং নির্দিষ্ট ত্রুটি ধরন ধরুনfinallyব্যবহার করুন:ফাইল, সংযুক্তি, এবং ডাটাবেস সংযোগ বন্ধ করা হচ্ছেtryব্লক করবেন না:শুধুমাত্র সম্ভাব্য ত্রুটি-প্রবণ কোডের চারপাশে মোড়ানোelseব্যবহার করুন:ব্যতিক্রম হ্যান্ডলিং থেকে পৃথক স্বাভাবিক প্রবাহ