মূল content-এ যাও

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 থেমে যায়:

main.py

try/except দিয়ে exception "ধরা" যায় — program না থামিয়ে অন্য কিছু করা যায়:

main.py

কেন দরকার?

Real-world data নোংরা। ML pipeline-এ এক লাখ row-এর মধ্যে তিনটা ভুল থাকলে পুরো training ভেঙে পড়া উচিত না:

  • CSV-তে সংখ্যার জায়গায় "N/A"
  • API কাজ করছে না, timeout
  • File নেই
  • User ভুল input দিয়েছে

ভালো engineer আশা করে যে ভুল হবে — আর আগে থেকে ঠিক করে রাখে তখন কী করবে।

Error message পড়তে শেখা

main.py

শেষ লাইনটা সবচেয়ে গুরুত্বপূর্ণ: error-এর type (KeyError) আর message ('Mim')। উপরের অংশ (traceback) দেখায় কোন লাইনে হয়েছে।

Errorকখন হয়উদাহরণ
ValueErrorType ঠিক, কিন্তু মান অচলint("abc")
TypeErrorভুল type"5" + 5
KeyErrorDict-এ key নেইd["missing"]
IndexErrorList-এর সীমার বাইরে[1, 2][5]
ZeroDivisionErrorশূন্য দিয়ে ভাগ1 / 0
FileNotFoundErrorFile নেইopen("nai.txt")
AttributeErrorObject-এ জিনিসটা নেইNone.upper()

নির্দিষ্ট error ধরো

main.py

একাধিক error আলাদাভাবে সামলাতে:

main.py

Error object নিজেই

as e লিখলে error-টা variable-এ পাওয়া যায় — message দেখানো বা log করার জন্য:

main.py

else আর finally

main.py
Blockকখন চলে
tryসবসময় চেষ্টা করে
exceptশুধু error হলে
elseশুধু error না হলে
finallyসবসময় — error হোক বা না হোক

finally সাধারণত পরিষ্কার করার কাজে: file বন্ধ করা, connection ছেড়ে দেওয়া।

যা কখনো করবে না

main.py

তিনটা আলাদা সমস্যা — খালি list, None, ভুল type — সবগুলোতেই চুপচাপ 0। Bug কখনো ধরা পড়বে না। ঠিক উপায়: শুধু খালি list-এর ব্যাপারটা (ZeroDivisionError) ধরো, বাকিগুলো error দিক — কারণ ওগুলো সত্যিই bug।

নিয়ম: যে error-এর জন্য তোমার কাছে একটা যুক্তিসঙ্গত সমাধান আছে, শুধু সেটাই ধরো। বাকিগুলো উঠে আসুক।

Exercise

Exercise

নিরাপদ ভাগ

+20 XP

safe_divide(a, b) function লেখো যেটা a / b return করে। কিন্তু b শূন্য হলে program crash না করে None return করবে।

if b == 0 দিয়ে না — try/except দিয়ে করো।

solution.py

Quiz

  1. Q1নিচের code কী print করবে?
    try:
        x = int("42")
    except ValueError:
        print("error")
    else:
        print("ok", x)
    finally:
        print("done")
    
  2. Q2{"a": 1}["b"] কোন error দেয়?
  3. Q3খালি except: (কোনো error-এর নাম ছাড়া) কেন খারাপ?
0/3 answered

Challenge

Challenge

অগোছালো form data

+50 XP

একটা form থেকে বয়স এসেছে string হিসেবে, কিন্তু কিছু ভুল লেখা। parse_ages(raw) function লেখো যেটা return করে একটা tuple: (valid, invalid)

  • valid — সংখ্যায় রূপান্তর করা গেছে এমন বয়সের int list
  • invalid — যেগুলো রূপান্তর করা যায়নি, সেই মূল string-গুলোর list

আগে-পরের space থাকলে সমস্যা নেই (" 25 " বৈধ)। Try/except ব্যবহার করো।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Dataset পরিষ্কার করা — ভুল row বাদ দিয়ে, কিন্তু কতগুলো বাদ গেল সেটা রিপোর্ট করে:

main.py

খেয়াল করো: কতগুলো বাদ গেছে সেটা রিপোর্ট করছি। ১০% 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 করা।