Exception handling বা Exception Management হল একটি গুরুত্বপূর্ণ প্রোগ্রামিং কৌশল যা ভুল (error) বা অপ্রত্যাশিত ঘটনা (exception) মোকাবেলা করার জন্য ব্যবহৃত হয়। এটি প্রোগ্রামকে ক্র্যাশ বা অপ্রত্যাশিতভাবে থামতে বাধা দেয় এবং প্রোগ্রামটি সঠিকভাবে কাজ করতে থাকে।
জুলিয়া ভাষায় try, catch, finally ব্লক ব্যবহার করে exception handling করা হয়।
১. try, catch, finally ব্লক (try, catch, finally block)
- try ব্লক: এখানে সেই কোড লেখা হয় যা সমস্যা সৃষ্টি করতে পারে বা যেখানে ভুল (exception) ঘটতে পারে।
- catch ব্লক: এখানে সেই কোড রাখা হয় যা ত্রুটি (exception) ধরার পরে কার্যকর হয়। এটি একটি ত্রুটি মোকাবেলা করার জন্য ব্যবহৃত হয়।
- finally ব্লক: এটি এমন একটি কোড ব্লক যা always এক্সিকিউট হবে, ত্রুটি ঘটুক বা না ঘটুক। এটি সাধারণত সাফ করা (cleaning up) বা ফাইল বন্ধ করার মতো কাজের জন্য ব্যবহৃত হয়।
সিনট্যাক্স:
try
# কোড যা ত্রুটি ঘটাতে পারে
catch ex
# ত্রুটি ঘটলে এর মধ্যে কোড এক্সিকিউট হবে
finally
# সবশেষে কোডটি এক্সিকিউট হবে, ত্রুটি ঘটুক বা না ঘটুক
end২. উদাহরণ (try, catch, finally ব্লক)
উদাহরণ ১: একটি ফাইল পড়ার চেষ্টা করা, যেখানে যদি ফাইল না পাওয়া যায়, তাহলে একটি ত্রুটি (exception) হ্যান্ডেল করা হবে।
try
# চেষ্টা করা হচ্ছে ফাইল খোলার
file = open("nonexistent_file.txt", "r")
data = readlines(file)
println(data)
catch ex
# ত্রুটি ঘটলে এটি execute হবে
println("Error: ", ex)
finally
# ফাইল বন্ধ করা হবে, ত্রুটি ঘটুক বা না ঘটুক
if isopen(file)
close(file)
println("File closed.")
end
endএখানে, "nonexistent_file.txt" ফাইলটি যদি না পাওয়া যায়, তাহলে catch ব্লকটি ত্রুটি (exception) ধরবে এবং "Error: ...", ত্রুটির বিবরণ প্রিন্ট করবে। finally ব্লকটি সবসময় ফাইলটি বন্ধ করবে।
উদাহরণ ২: একটি ডিভাইড অপারেশন, যেখানে শূন্য দ্বারা ভাগ করার চেষ্টা করা হলে ত্রুটি হবে।
try
# ডিভাইড অপারেশন
result = 10 / 0 # এখানে শূন্য দ্বারা ভাগ করার চেষ্টা
println("Result: ", result)
catch ex
# ত্রুটি ঘটলে এটি execute হবে
println("Exception occurred: ", ex)
finally
println("End of operation.")
endএখানে, শূন্য দ্বারা ভাগ করার চেষ্টা করা হচ্ছে, ফলে একটি DivideError ত্রুটি ঘটবে এবং catch ব্লকটি ত্রুটির তথ্য প্রিন্ট করবে, আর finally ব্লকটি সবসময় এক্সিকিউট হবে।
৩. Exception Object (Exception অবজেক্ট)
যখন কোনো ত্রুটি ঘটে, তখন একটি exception object তৈরি হয় যা ত্রুটির ধরন এবং বিস্তারিত তথ্য ধারণ করে। এটি catch ব্লকে পাস করা হয় এবং আপনি এই অবজেক্টটি ব্যবহার করে ত্রুটির তথ্য পেতে পারেন।
উদাহরণ:
try
# ত্রুটি সৃষ্টিকারী কোড
open("nonexistent_file.txt")
catch ex
println("Caught an exception: ", ex)
println("Exception type: ", typeof(ex))
endএখানে, ex একটি exception object যা ত্রুটির ধরন (type) এবং বিস্তারিত তথ্য ধারণ করে। এটি typeof(ex) দিয়ে ত্রুটির ধরন জানতে পারে।
৪. Multiple Exceptions (একাধিক ত্রুটি)
আপনি একাধিক ধরনের ত্রুটি হ্যান্ডলিং করতে পারেন, যেখানে আপনি বিভিন্ন ধরণের ত্রুটি ধরার জন্য বিভিন্ন catch ব্লক ব্যবহার করতে পারেন।
উদাহরণ:
try
# ত্রুটি সৃষ্টিকারী কোড
open("nonexistent_file.txt")
result = 10 / 0 # ZeroDivisionError ঘটবে
catch ex
if isa(ex, SystemError)
println("System error: ", ex)
elseif isa(ex, DivideError)
println("Divide by zero error: ", ex)
else
println("An unexpected error occurred: ", ex)
end
endএখানে, isa(ex, SomeErrorType) ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট ত্রুটি ধরতে পারবেন এবং সেই অনুযায়ী কোড এক্সিকিউট করতে পারবেন।
৫. Error Handling without finally
যদি finally ব্লকটি প্রয়োজন না হয়, তাহলে আপনি শুধু try এবং catch ব্লক ব্যবহার করতে পারেন।
উদাহরণ:
try
println("This is a risky operation.")
# Some risky operation
catch ex
println("Caught an exception: ", ex)
endএখানে finally ব্লক ছাড়া শুধু try এবং catch ব্লক ব্যবহার করা হয়েছে। এটি ত্রুটির ক্ষেত্রে সঠিকভাবে এক্সিকিউট হবে।
সারসংক্ষেপ
- try: এখানে কোড রাখা হয় যা ত্রুটি সৃষ্টি করতে পারে।
- catch: ত্রুটি ঘটলে এখানে সেই ত্রুটি পরিচালনা করা হয়।
- finally: এটি সবসময় রান করবে, ত্রুটি ঘটুক বা না ঘটুক, এবং সাধারনত কোড ক্লিন আপ বা রিসোর্স মুক্ত করার জন্য ব্যবহৃত হয়।
- Exception Object: যখন একটি ত্রুটি ঘটে, তখন একটি exception object তৈরি হয়, যা ত্রুটির বিস্তারিত তথ্য ধারণ করে।
- Multiple Exceptions: একাধিক ধরনের ত্রুটি হ্যান্ডল করার জন্য একাধিক
catchব্লক ব্যবহার করা যায়।
Exception management কোডের স্থিতিশীলতা নিশ্চিত করতে এবং অপ্রত্যাশিত ত্রুটির ক্ষেত্রে প্রোগ্রামটি চালু রাখার জন্য অপরিহার্য।
Read more