سبق Exceptions

محب علوی نے 'پائتھون' کی ذیل میں اس موضوع کا آغاز کیا، ‏مارچ 18, 2013

  1. محب علوی

    محب علوی لائبریرین

    مراسلے:
    12,470
    جھنڈا:
    Pakistan
    موڈ:
    Bookworm
    تعارف
    استثنا تب ہوتا ہے جب پروگرام میں کوئی استثنائی صورت پیدا ہوتی ہے ۔ مثلا اگر ہم کوئی فائل پڑھنے کی کوشش کریں اور فائل موجود ہی نہ ہو ؟ اگر وہ غلطی سے حذف (delete) کر دی گئی ہو یا اس کا نام تبدیل کر دیا گیا ہو۔ ایسی صورتحال کو استثنا کے ذریعے سنبھالا جاتا ہے۔
    اسی طرح اگر کسی پروگرام میں کوئی غیر درست بیان موجود ہو تو پائتھون نشاندہی (raises) کر دیتا ہے اور بتاتا ہے کہ کوئی غلطی ہے۔

    Errors
    ایک سادہ مثال پرنٹ فنکشن کال کی ہے۔ اگر غلطی سے print کی جگہ Print لکھا جائے تو کیا ہوگا ؟ اس صورت میں پائتھون نشاندہی کرتا ہے ایک غلطی کی۔
    PHP:
    >>> Print("Hello World")
    Traceback (most recent call last):
      
    File "<pyshell#0>"line 1in <module>
        Print(
    "Hello World")
    NameErrorname 'Print' is not defined
    >>> print("Hello World")
    Hello World
    NameError نامی استثنا کی نشاندہی کی گئی ہے اور اس جگہ کے بارے میں بھی پرنٹ کیا گیا ہے جہاں یہ غلطی واقع ہوئی ہے۔ ایک error handler یہ کام کرتا ہے جب کوئی غلطی پیدا ہوتی ہے ۔

    Exceptions
    اب ہم کوشش کریں گے کہ صارف سے کوئی نمبر درج کروائیں اور پھر اسے پڑھیں۔ اس کے بعد ہم Ctrl -D دبائیں گے اور دیکھیں گے کہ کیا ہوتا ہے۔


    PHP:
    >>> input("Enter something ..")
    Enter something ..
    Traceback (most recent call last):
      
    File "<pyshell#6>"line 1in <module>
        
    input("Enter something ..")
    EOFErrorEOF when reading a line
    پائتھون نے ایک غلطی EOFError کی نشاندہی کی ہے جس کا مطلب ہے کہ اسے فائل کی اختتامی علامت (Ctrl-d سے ظاہر کیا جاتا ہے) مل گئی ہے جس کی اسے توقع نہ تھی۔

    چند مزید مثالیں:

    PHP:
    try:
        
    y
    except
    :
        print(
    'y not defined')
     
    Output:
    y not defined
    PHP:
    try:
        
    1/0
    except ZeroDivisionError 
    as e:
        print (
    e)
     
    Output:
    division by zero
     
  2. محب علوی

    محب علوی لائبریرین

    مراسلے:
    12,470
    جھنڈا:
    Pakistan
    موڈ:
    Bookworm
    Handling Exceptions
    استثنا (exception) کو سنبھالنے کے لیے ہم try .. except بلاک کا استعمال کرتے ہیں۔
    تمام عمومی بیانات try بلاک میں رکھتے ہیں اور کوئی بھی غلطیوں کو سنبھالنے کا کوڈ except بلاک میں یعنی تمام error handlers ۔

    PHP:
    >>> input("Enter something ..")
    Enter something ..
    Traceback (most recent call last):
      
    File "<pyshell#6>"line 1in <module>
        
    input("Enter something ..")
    EOFErrorEOF when reading a line
    نتیجہ کچھ ایسے ہوگا ۔
    کوڈ:
    Enter something --> # Press ctrl-d
    Why did you do an EOF on me?
     
    Enter something --> # Press ctrl-c
    You cancelled the operation.
     
     
    Enter something --> no exceptions
    You entered no exceptions
    اس کوڈ میں ہم نے ایسے تمام بیانات جس سے کوئی غلطی یا استثنائی صورت پیدا ہو سکتی ہے اسے try بلاک میں رکھا ہے اور پھر غلطیوں اور استثنائی صورتوں کو سنبھالنے کا سارا کوڈ ہم نے except بلاک میں رکھا ہے۔
    except بلاک میں ہم ایک غلطی یا استثنا(exception) بھی سنبھال سکتے ہیں اور ایک سے زیادہ استثنائی صورتیں قوسین (parenthesis) میں ایک لسٹ کے طور پر۔
    اگر ایک یا زئاید استثنا(exception) کا کوئی نام نہ دیا جائے تو تمام غلطیاں اور استثنات ایک ہی جگہ نمٹ جاتی ہیں۔
    ہر try بلاک کے ساتھ ایک except بلاک بھی ہوتا ہے۔

    اگر کسی غلطی یا استثنا کے لیے کوئی بھی except بلاک نہ ہو تو پائتھون غلطی کے بارے میں ایک پیغام پرنٹ کرکے پروگرام کو ختم کر دیتا ہے۔
     
  3. محب علوی

    محب علوی لائبریرین

    مراسلے:
    12,470
    جھنڈا:
    Pakistan
    موڈ:
    Bookworm
    Raising Exceptions
    استثنا(exception) کو ابھارا(raise) جا سکتا ہے نام کے ساتھ اور کچھ تفصیل کے استثنا کس چیز کے متعلق ہے۔
    پہلے ہم دیکھ چکے ہیں کہ غلطی ہونے کی صورت میں استثنا پیدا ہوتا ہے مگر ہم چاہیں تو خود بھی کسی موقع پر کوئی استثنا پیدا کر سکتے ہیں اور پھر اسے کوڈ میں try بلاک کے بعد except بلاک میں سنبھال سکتے ہیں۔

    raise بیان کی مدد سے پروگرامر کسی استثنا (exception) کو ہونے پر مجبور کر سکتا ہے۔ raise کے لیے واحد دلیل exception کا نام ہوتا ہے اور یوں استثنا واقع ہو جاتا ہے۔

    PHP:
    >>> raise NameError('HiThere')
    Traceback (most recent call last):
      
    File "<stdin>"line 1in ?
    NameErrorHiThere
    ایک اور طریقہ یہ بھی ہے کہ استثنا (exception) کو ابھار کر اسے except بلاک میں پکڑ کر کوئی کاروائی کر لی جائے۔ کوئی پیغام پرنٹ کروایا جا سکتا ہے یا کوئی اور کوڈ لکھ کر پروگرام کے نتائج کا رخ موڑا جا سکتا ہے۔

    PHP:
    try:
        
    level 1
        
    if level 2:
          
    raise NameError("level")
    except NameError:
          print(
    "New error")
     
    Output:
    New 
    Error
    اوپر والی مثال میں اگر level متغیر(variable) کی قیمت 1 ہو تو استثنا NameError ابھاری گئی ہے جو try بلاک کے اختتام کے بعد except بلاک میں استثنا(exception) کو اس کے نام سے گرفتار(catch) کر لیا گیا ہے۔
     
  4. محب علوی

    محب علوی لائبریرین

    مراسلے:
    12,470
    جھنڈا:
    Pakistan
    موڈ:
    Bookworm
    ابھی تک جو بھی استثنا ہم نے ابھاری ہے وہ پہلے سے پائتھون میں موجود ہوتی ہے اور اس کا نام ہو بہو لکھ کر ہی ہم اسے except بلاک میں گرفت میں لے کر اس پر کوئی کام کر سکتے ہیں۔ پہلے سے موجود استثنات () کی مثالیں اوپر ہم دیکھ چکے ہیں۔​
    ZeroDivisionError​
    NameError​
    اگر ہم کوئی مرضی کی استثنا متعارف کروانا چاہ رہے ہیں جس کا نام ہم اپنی مرضی سے دیں تو اسے ایک کلاس ہونا لازمی ہے اور اس کی موروثی کلاس Exception ہونی چاہیے۔​
    ایک مثال کے ذریعے اسے سمجھتے ہیں۔​
    PHP:
    class InputException(Exception):
        
    '''A user-defined exception class.'''
        
    def __init__(selflengthatleast):
            
    self.length length
            self
    .atleast atleast
     
    try:
        
    input('Enter something --> ')
        if 
    len(s) < 3:
            
    raise InputException(len(s), 3)
    except EOFError:
        print(
    'Why did you do an EOF on me?')
    except InputException as x:
        print(
    'ShortInputException: The input was of length {0}, was expecting at least {1}'.format(x.lengthx.atleast))
    else:
        print(
    "Everything is fine")
    اس کوڈ میں ہم نے ایک نئی ٹائپ متعارف کروائی ہے ، یہ نئی استثنائی ٹائپ ہماری بنائی ہوئی InputException کلاس ہے۔ اس میں ہم نے دو متغیرات(length اور atleast) کو شروع میں ہی کلاس object کو تفویض کر دیا ہے۔​
    self.length = length​
    self.atleast = atleast​
    ہماری کلاس میں دو فیلڈ ہیں
    length : جو کہ ان پٹ کی لمبائی پر مشتمل ہے
    atleast : جو کہ کم از کم لمبائی ہے جو پروگرام صارف سے توقع کر رہا ہے۔

    except جزو میں ہم نے استثنائی کلاس کا نام دیا ہے اور ایک متغیر کا بھی بتایا ہے جو استثنائی object کی معلومات پر اختیار رکھتا ہے۔ اگر length کی لمبائی تین سے کم ہے تو ایک پیغام پرنٹ ہوتا ہے جو صارف کے درج کردہ مواد کی لمبائی اور متوقع لمبائی کا بتاتا ہے۔
    اگر سب ٹھیک ہے تو پھر else جزو میں کوڈ چلا جاتا ہے اور وہاں پرنٹ فنکشن سے ایک پیغام شائع ہو جاتا ہے۔
     
    • زبردست زبردست × 1
    • معلوماتی معلوماتی × 1

اس صفحے کی تشہیر