Python for AI/Errors ও Files/Lesson 27
Exceptions: try / except
Error হলেই program ভেঙে পড়বে না — try/except দিয়ে সামলাও, নির্দিষ্ট error ধরো, else আর finally, আর কেন খালি except কখনো লিখবে না।
- সময়
- 22 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
Program চলার সময় কিছু ভুল হলে Python একটা exception "ছুঁড়ে দেয়" (raise করে)। কেউ না ধরলে program থেমে যায়:
try/except দিয়ে exception "ধরা" যায় — program না থামিয়ে অন্য কিছু করা যায়:
কেন দরকার?
Real-world data নোংরা। ML pipeline-এ এক লাখ row-এর মধ্যে তিনটা ভুল থাকলে পুরো training ভেঙে পড়া উচিত না:
- CSV-তে সংখ্যার জায়গায়
"N/A" - API কাজ করছে না, timeout
- File নেই
- User ভুল input দিয়েছে
ভালো engineer আশা করে যে ভুল হবে — আর আগে থেকে ঠিক করে রাখে তখন কী করবে।
Error message পড়তে শেখা
শেষ লাইনটা সবচেয়ে গুরুত্বপূর্ণ: error-এর type (KeyError) আর message ('Mim')। উপরের অংশ (traceback) দেখায় কোন লাইনে হয়েছে।
| Error | কখন হয় | উদাহরণ |
|---|---|---|
ValueError | Type ঠিক, কিন্তু মান অচল | int("abc") |
TypeError | ভুল type | "5" + 5 |
KeyError | Dict-এ key নেই | d["missing"] |
IndexError | List-এর সীমার বাইরে | [1, 2][5] |
ZeroDivisionError | শূন্য দিয়ে ভাগ | 1 / 0 |
FileNotFoundError | File নেই | open("nai.txt") |
AttributeError | Object-এ জিনিসটা নেই | None.upper() |
নির্দিষ্ট error ধরো
একাধিক error আলাদাভাবে সামলাতে:
Error object নিজেই
as e লিখলে error-টা variable-এ পাওয়া যায় — message দেখানো বা log করার জন্য:
else আর finally
| Block | কখন চলে |
|---|---|
try | সবসময় চেষ্টা করে |
except | শুধু error হলে |
else | শুধু error না হলে |
finally | সবসময় — error হোক বা না হোক |
finally সাধারণত পরিষ্কার করার কাজে: file বন্ধ করা, connection ছেড়ে দেওয়া।
যা কখনো করবে না
তিনটা আলাদা সমস্যা — খালি list, None, ভুল type — সবগুলোতেই চুপচাপ 0। Bug কখনো ধরা পড়বে না। ঠিক উপায়: শুধু খালি list-এর ব্যাপারটা (ZeroDivisionError) ধরো, বাকিগুলো error দিক — কারণ ওগুলো সত্যিই bug।
নিয়ম: যে error-এর জন্য তোমার কাছে একটা যুক্তিসঙ্গত সমাধান আছে, শুধু সেটাই ধরো। বাকিগুলো উঠে আসুক।
Exercise
Exercise
নিরাপদ ভাগ
safe_divide(a, b) function লেখো যেটা a / b return করে। কিন্তু b শূন্য হলে program crash না করে None return করবে।
if b == 0 দিয়ে না — try/except দিয়ে করো।
Quiz
Challenge
Challenge
অগোছালো form data
একটা form থেকে বয়স এসেছে string হিসেবে, কিন্তু কিছু ভুল লেখা। parse_ages(raw) function লেখো যেটা return করে একটা tuple: (valid, invalid)
valid— সংখ্যায় রূপান্তর করা গেছে এমন বয়সের int listinvalid— যেগুলো রূপান্তর করা যায়নি, সেই মূল string-গুলোর list
আগে-পরের space থাকলে সমস্যা নেই (" 25 " বৈধ)। Try/except ব্যবহার করো।
বাস্তবে কোথায় ব্যবহার হয়?
Dataset পরিষ্কার করা — ভুল row বাদ দিয়ে, কিন্তু কতগুলো বাদ গেল সেটা রিপোর্ট করে:
খেয়াল করো: কতগুলো বাদ গেছে সেটা রিপোর্ট করছি। ১০% row বাদ গেলে ঠিক আছে; ৯০% গেলে data-তেই বড় সমস্যা — চুপচাপ চালিয়ে যাওয়া উচিত না।
Interview প্রশ্ন
- Beginner:
try/exceptকী?ValueErrorআরTypeError-এর পার্থক্য কী? - Intermediate:
finallyকখন চলে?returnথাকলেও কি চলে? (হ্যাঁ — return-এর আগে।) - Advanced: "EAFP" (Easier to Ask Forgiveness than Permission) আর "LBYL" (Look Before You Leap) কী? Python কোনটা পছন্দ করে, কেন?
এরপর কী?
Error ধরা শিখলাম। কিন্তু তোমার নিজের function-এ কেউ ভুল input দিলে? তখন তুমি নিজে error ছুঁড়বে। পরের lesson: Exception raise করা।