مرکزی مواد پر جائیں
ماڈیول 2 · سبق 4 از 4کورس میں 8/36~12 min
ماڈیول اسباق (4/4)

خرابی سے نمٹنے: کوشش کریں/سوائے

جب رن ٹائم پر کچھ غلط ہو جاتا ہے (صفر سے تقسیم، ایک گمشدہ کلید، ایک غیر مطابقت پذیر اقسام پر آپریشن) ازگر ایک استثنیٰ پیدا کرتا ہے۔ بغیر ہینڈلنگ، استثناء پروگرام میں خلل ڈالتا ہے۔ try / except کے ساتھ آپ اسے پکڑ سکتے ہیں اور فیصلہ کر سکتے ہیں کہ کیا کرنا ہے۔

بنیادی شکل

Python
try:
    risultato = 10 / 0
except ZeroDivisionError:
    risultato = None
risultato  # None
  • try: بلاک میں وہ کوڈ ہے جو ناکام ہو سکتا ہے۔
  • except <ErrorType>: کو صرف اس صورت میں عمل میں لایا جاتا ہے جب اس غلطی کی قسم کو اٹھایا جائے۔ try کے اندر۔

استثنائی پیغام کو پکڑنا

استثنیٰ آبجیکٹ کو کسی نام سے باندھنے کے لیے as کا استعمال کریں:

Python
try:
    int("non è un numero")
except ValueError as e:
    messaggio = str(e)
messaggio  # "invalid literal for int() with base 10: 'non è un numero'"

ایک ساتھ متعدد اقسام

Python
try:
    valore = dati[chiave]
except (KeyError, IndexError):
    valore = None

اقسام کا ایک مجموعہ ان اقسام (یا ذیلی طبقات) میں سے کسی بھی استثناء کو پکڑتا ہے۔

مکمل ڈھانچہ: کوشش کریں / چھوڑ کر / اور / آخر میں

Python
try:
    n = int("42")
except ValueError:
    print("not a number")
else:
    print(f"parsed: {n}")     # executed only if NO exception occurred
finally:
    print("always executed")  # executed regardless, even on exception
  • else — اس کوڈ کے لیے استعمال کریں جو try کی کامیابی پر منحصر ہے۔ رکھ لو الگ کریں تاکہ آپ غلطی سے غیر متعلقہ استثناء کو نہ پکڑیں۔
  • finally — صفائی جو ہمیشہ ہونی چاہیے (فائل کو بند کرنا، جاری کرنا وسائل)۔ کامیابی اور غلطی دونوں پر پھانسی دی گئی۔

استثنیٰ کو بڑھانا: raise

کبھی کبھی آپ وہ ہوتے ہیں جو یہ اشارہ کرنا چاہتے ہیں کہ کچھ غلط ہو گیا ہے:

Python
def diviso(a, b):
    if b == 0:
        raise ValueError("the divisor cannot be zero")
    return a / b

سب سے عام بلٹ ان مستثنیات جن کا آپ سامنا کریں گے اور اضافہ کریں گے:

  • ValueError — قدر کی صحیح قسم ہے لیکن ناقابل قبول ہے (مثلاً تجزیہ کرنا)۔
  • TypeError — قسم غلط ہے (جیسے len(42))۔
  • KeyError / IndexError — غائب کلید/انڈیکس۔
  • ZeroDivisionError — صفر سے تقسیم۔
  • FileNotFoundError, PermissionError — فائل سسٹم آپریشنز۔

دوسرے اور آخر میں ٹرائی بلاکس میں شقیں

ایک try بلاک دو اضافی شقوں کی وضاحت کر سکتا ہے:

  • else: صرف اس صورت میں عمل میں لایا جاتا ہے جب try بلاک بغیر کسی استثناء کے مکمل ہو جائے۔
  • finally: ہمیشہ پھانسی دی جاتی ہے، قطع نظر اس کے کہ کوئی استثناء واقع ہوا ہو۔ یہ وسائل کو صاف کرنے کے لیے مثالی ہے (جیسے کھلی فائل یا ڈیٹا بیس کنکشن کو بند کرنا)۔

خود ہی آزمائیں۔

ورزش#python.m2.l4.e1
کوششیں: 0لوڈ ہو رہا ہے…

ایک ایسا اظہار لکھیں جو int('abc' کی کوشش کرتا ہے): اگر ValueError اٹھایا جاتا ہے، تو سٹرنگ 'error' کو 'نتیجہ' میں تفویض کریں؛ بصورت دیگر نمبر تفویض کریں۔ `نتائج` کا اندازہ لگائیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

int('abc') ValueError کو بڑھاتا ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#python.m2.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

'divide(a, b)' کی وضاحت کریں جو a/b لوٹاتا ہے لیکن اگر b 0 ہے تو پیغام 'تقسیم صفر' کے ساتھ ValueError کو بڑھاتا ہے۔ پھر کوشش/سوائے کے اندر divide(10, 0) کو کال کریں اور پکڑے گئے استثنا کی تار کو `پیغام` کے لیے تفویض کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

فنکشن کے اندر ValueError('...') بڑھائیں۔ ای کے بطور ValueError کے علاوہ کیچ کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

اضافی چیلنج

ورزش#python.m2.l4.e3
کوششیں: 0لوڈ ہو رہا ہے…

سٹرنگ \`text_val = "abc"\` کو عدد میں تبدیل کرنے کے لیے \`try-except\` بلاک لکھیں۔ اگر تبدیلی \`ValueError\` کو بڑھاتی ہے تو \`None\` کو \`نتائج\` تفویض کریں۔ بصورت دیگر، تبدیل شدہ نمبر تفویض کریں۔ آخر میں، \`نتائج\` کا اندازہ لگائیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

استعمال کریں try: result = int(text_val) اس کے بعد ValueError کے علاوہ: result = None۔

3 کوششوں کے بعد حل دستیاب ہے۔