কম্পিউটার টিউটোরিয়াল

পাইথনে এক্সসেপশন কি? (What is Exception)

এক্সসেপশন হলো একটি ইভেন্ট, যা প্রোগ্রাম এক্সিকিউশনের সময় ঘটে এবং প্রোগ্রামের সাধারণ নির্দেশাবলির প্রবাহ বাধা দেয়। সাধারণত, যখন একটি পাইথন স্ক্রিপ্ট এমন পরিস্থিতি মুখোমুখি হয় যা সেটি হ্যান্ডল করতে পারে না, তবে সেটি একটি এক্সসেপশন raise করে। এক্সসেপশন হলো একটি পাইথন অবজেক্ট যা একটি এরর রিপ্রেজেন্ট করে।

যখন পাইথন স্ক্রিপ্ট এক্সসেপশন raise করে, তবে সেটি অবশ্যই তা তাত্ক্ষণিক হ্যান্ডল করতে হবে, অন্যথায় প্রোগ্রাম টারমিনেট হয়ে quit করে যাবে।

এক্সসেপশন হ্যান্ডলিং

যদি আপনার কাছে এমন কোড থাকে যা এক্সসেপশন raise করতে পারে, তবে সন্দেহজনক কোডটি try: ব্লকে রাখে আপনার প্রোগ্রামকে রক্ষা করতে পারেন। try: ব্লকের পর except: স্টেটমেন্ট এবং তারপর সমস্যা হ্যান্ডল করার কোড ব্লক যোগ করুন।

সিনট্যাক্স

try:
    # আপনার অপারেশনগুলো এখানে
    ......................
except ExceptionI:
    # ExceptionI হলে এই ব্লক এক্সিকিউট হবে
except ExceptionII:
    # ExceptionII হলে এই ব্লক এক্সিকিউট হবে
    ......................
else:
    # কোন এক্সসেপশন না হলে এই ব্লক এক্সিকিউট হবে

উপরোক্ত সিনট্যাক্স সম্পর্কে গুরুত্বপূর্ণ পয়েন্টগুলো:

  • একটি try স্টেটমেন্টে একাধিক except স্টেটমেন্ট থাকতে পারে। এটি তখন উপকারী যখন try ব্লকে বিভিন্ন টাইপের এক্সসেপশন থ্রো করা স্টেটমেন্ট থাকে।
  • আপনি একটি জেনেরিক except ক্লজ দিতে পারেন, যা যেকোনো এক্সসেপশন হ্যান্ডল করে।
  • except ক্লজ(গুলো)-র পর একটি else-ক্লজ যোগ করতে পারেন। try: ব্লকের কোড এক্সসেপশন raise না করলে else-ব্লকের কোড এক্সিকিউট হয়।
  • else-ব্লক সেসব কোডের জন্য ভালো জায়গা যেগুলো try: ব্লকের প্রোটেকশন ছাড়া চলে।

উদাহরণ ১

এই উদাহরণে একটি ফাইল খোলা, কন্টেন্ট লেখা এবং কোনো সমস্যা না থাকায় গ্রেসফুলি বের হওয়া দেখানো হয়েছে:

#!/usr/bin/python
try:
    fh = open("testfile", "w")
    fh.write("This is my test file for exception handling!!")
except IOError:
    print "Error: can't find file or read data"
else:
    print "Written content in the file successfully"
    fh.close()

আউটপুট

Written content in the file successfully

উদাহরণ ২

এই উদাহরণে রাইট পারমিশন ছাড়া ফাইল খোলার চেষ্টা করা হয়েছে, তাই এক্সসেপশন raise হয়:

#!/usr/bin/python
try:
    fh = open("testfile", "r")
    fh.write("This is my test file for exception handling!!")
except IOError:
    print "Error: can't find file or read data"
else:
    print "Written content in the file successfully"

আউটপুট

Error: can't find file or read data

কোন এক্সসেপশন ছাড়া except ক্লজ

try:
    # আপনার অপারেশনগুলো এখানে
    ......................
except:
    # যেকোনো এক্সসেপশন হলে এই ব্লক এক্সিকিউট হবে
    ......................
else:
    # কোন এক্সসেপশন না হলে এই ব্লক এক্সিকিউট হবে

এই ধরনের try-except সকল এক্সসেপশন ক্যাচ করে। তবে এটি ভালো প্রোগ্রামিং প্র্যাকটিস নয়, কারণ এটি মূল সমস্যা চিহ্নিত করতে দেয় না।

একাধিক এক্সসেপশন সহ except ক্লজ

try:
    # আপনার অপারেশনগুলো এখানে
    ......................
except (Exception1[, Exception2[,...ExceptionN]]):
    # দিয়ে এক্সসেপশন লিস্ট থেকে যেকোনো এক্সসেপশন হলে এই ব্লক এক্সিকিউট হবে
    ......................
else:
    # কোন এক্সসেপশন না হলে এই ব্লক এক্সিকিউট হবে

try-finally ক্লজ

try: ব্লকের সাথে finally: ব্লক ব্যবহার করা যায়। finally ব্লক সেটি কোড রাখার জায়গা যা অবশ্যই এক্সিকিউট হবে, try-ব্লক এক্সসেপশন raise করুক বা না করুক।

try:
    # আপনার অপারেশনগুলো এখানে
    ......................
    # এক্সসেপশন হলে এটি স্কিপ হতে পারে
finally:
    # এটি সবসময় এক্সিকিউট হবে
    ......................

finally ক্লজের সাথে else ক্লজ ব্যবহার করা যায় না।

উদাহরণ

#!/usr/bin/python
try:
    fh = open("testfile", "w")
    fh.write("This is my test file for exception handling!!")
finally:
    print "Error: can't find file or read data"

আউটপুট

রাইট মোডে ফাইল খোলার পারমিশন না থাকলে:

Error: can't find file or read data

আরও পরিষ্কার উদাহরণ:

#!/usr/bin/python
try:
    fh = open("testfile", "w")
    try:
        fh.write("This is my test file for exception handling!!")
    finally:
        print "Going to close the file"
        fh.close()
except IOError:
    print "Error: can't find file or read data"

try-ব্লকে এক্সসেপশন থ্রো হলে এক্সিকিউশন অবিলম্বে finally-ব্লকে যায়। finally-ব্লকের সব স্টেটমেন্ট এক্সিকিউট হওয়ার পর এক্সসেপশন পুনরায় raise হয় এবং পরবর্তী উচ্চতর লেয়ারের try-except-স্টেটমেন্ট-এ except-স্টেটমেন্টে হ্যান্ডল হয়।

  1. পাইথনে ইনসারশন সর্ট (Insertion Sort) কী?

  2. পাইথনের Sys মডিউল কী?

  3. পাইথনের OS মডিউল কী?

  4. পাইথনে CGI কী?