রানটাইমে জিনিস ভুল হয় — একটি ফাইল হয়তো নেই, ব্যবহারকারীর ইনপুট হয়তো যা প্রত্যাশিত ছিল তা নয়। Python-এর try/except সরাসরি ক্র্যাশ করার বদলে এটি সুন্দরভাবে হ্যান্ডেল করে, PHP-এর try/catch-এর একই ধারণা, কয়েকটি অতিরিক্ত অংশসহ।
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero.")
return a / b
try:
print(divide(10, 0))
except ValueError as e:
print(f"Error: {e}")raise হলো PHP-এর throw-এর Python সমতুল্য; except হলো catch-এর সমতুল্য।
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Specifically caught: {e}")
except Exception as e:
print(f"General error: {e}")PHP-এর মতোই, ক্রম গুরুত্বপূর্ণ — একটি নির্দিষ্ট exception টাইপ একটি বেশি সাধারণ টাইপের আগে থাকা উচিত যা নাহলে সেটাকে আগে ধরে ফেলত।
Python একটি else ব্লক যোগ করে যা PHP-তে নেই: এটি শুধু চলে যদি কোনো exception না ওঠে। finally যেকোনো অবস্থাতেই চলে, ঠিক PHP-এর মতো:
try:
result = divide(10, 2)
except ValueError as e:
print(f"Error: {e}")
else:
print(f"Success: {result}") # only runs if no exception happened
finally:
print("Done.") # always runstry:
value = int("not a number")
except (ValueError, TypeError) as e:
print(f"Bad input: {e}")Traceback ডেভেলপারদের জন্য, ব্যবহারকারীদের জন্য নয়
একটি বাস্তব, ডিপ্লয় করা Python প্রোগ্রামে একটি না-ধরা exception একটি সম্পূর্ণ traceback প্রিন্ট করে — ফাইল পাথ, লাইন নাম্বার, কখনো কখনো ভ্যারিয়েবলের মান — যা ডেভেলপ করার সময় আপনার জন্য অমূল্য, কিন্তু কখনো সরাসরি একজন end user-কে দেখানো উচিত নয়। ঝুঁকিপূর্ণ অপারেশন (ফাইল অ্যাক্সেস, নেটওয়ার্ক রিকোয়েস্ট, user input পার্স করা) try/except-এ মুড়িয়ে দেওয়াই এটাকে একটি পরিষ্কার, নিয়ন্ত্রিত মেসেজে বদলে দেয়।