Skip to content

8. Error Handling — غلطی کا انتظام

Difficulty: Intermediate — متوسط
Time: ~20 minutes


Why Handle Errors? — غلطی کیوں سنبھالیں؟

When something goes wrong (bad input, missing file, network error), Urdu PL throws an error. Without handling it, the program crashes. With کوشش/پکڑو, you catch the error and respond gracefully.

اردو: غلطی آنے پر پروگرام رک جاتا ہے۔ کوشش/پکڑو سے غلطی پکڑیں اور پروگرام چلتا رہے۔


Try / Catch — کوشش / پکڑو

کوشش {
    لکھو("شروع");
    پھینکو نیا غلطی("کچھ غلط ہوا");
    لکھو("یہ نہیں چلے گا");
} پکڑو (غ) {
    ��کھو(`پکڑی: ${غ.message}`);
}

Output:

شروع
پکڑی: کچھ غلط ہوا

Pattern:

کوشش {
    // code that might fail
} پکڑو (غلطی_متغیر) {
    // handle the error
}

اردو: کوشش میں وہ کوڈ جو غلطی دے سکتا ہے۔ پکڑو میں غلطی کا نام لکھیں — اس سے غلطی کا پیغام (غ.message) ملتا ہے۔


Finally — آخر

آخر always runs, whether an error occurred or not:

کو��ش {
    لکھو(10 / 2);
} پکڑو (غ) {
    لکھو(`خطا: ${غ.message}`);
} آخر {
    لکھو("آخر — ہمیشہ چلتا ہ��");
}

Output:

5.0
آ��ر — ہمیشہ چلتا ہے

اردو: آخر کا کوڈ ہمیشہ چلتا ہے — غلطی آئے یا نہ آئے۔ فائل بند کرنے یا صفائی کے لیے مفید۔


Throwing Errors — غلطی پھینکنا

فنکشن تقسیم(الف, ب) {
    اگر (ب == 0) {
        پھینکو نیا غلطی("صفر سے تقسیم ممنوع");
    }
    واپس الف / ب;
}

کوشش {
    لکھو(تقسیم(10, 2));     // 5.0
    لکھو(تقسیم(10, 0));     // throws!
} پکڑو (غ) {
    لکھو(`خطا: ${غ.message}`);
}

Output:

5.0
خطا: صفر سے تقسیم ممنوع


Input Validation Pattern — ان پٹ جانچ

فنکشن عمر_جانچیں(عمر) {
    اگر (نان_ہے(عمر)) {
        پھینکو نیا غلطی("عمر عدد ہونی ��اہیے");
    }
    اگر (عمر < 0 یا عمر > 150) {
        پھینکو نیا غلطی(`غلط عمر: ${عمر}`);
    }
    واپس سچ;
}

کوشش {
    عمر_جانچیں(عدد("abc"));    // NaN
} پکڑو (غ) {
    لکھو(`خطا: ${غ.message}`);
}

کوشش {
    عمر_جانچیں(-5);
} پکڑو (غ) {
    لکھ��(`خطا: ${غ.message}`);
}

Nested Try/Catch — اندرونی کوشش/پکڑو

کوشش {
    کوشش {
        پھینکو نیا غلطی("اندرونی غلطی");
    } پکڑو (اندرونی_غ) {
        لکھو(`اندر: ${اندرونی_غ.message}`);
        پھینکو نیا غلطی("دوبارہ پھینکی");
    }
} پکڑو (باہری_غ) {
    لکھو(`باہر: ${باہری_غ.message}`);
}

Practical Example: Safe Calculator — عملی مثال: محفوظ کیلکولیٹر

فنکشن محفوظ_تقسیم(الف_م, ب_م) {
    کوشش {
        متغیر الف = اعشاریہ(الف_م);
        متغیر ب = اعشاریہ(ب_م);
        اگر (نان_ہے(الف) یا نان_ہے(ب)) {
            پھینکو نیا غلطی("دونوں قدریں اعداد ہونی چاہئیں");
        }
        اگر (ب == 0) {
            پھینکو نیا غلطی("صفر سے تقسیم ممنوع");
        }
        واپس الف / ب;
    } پکڑو (غ) {
        واپس `خطا: ${غ.message}`;
    }
}

لکھو(محفوظ_��قسیم("10", "4"));     // 2.5
لکھو(محفوظ_تقسیم("10", "0"));     // خطا: صفر سے تقسیم ممنوع
لکھو(محفوظ_ت��سیم("10", "abc"));   // خطا: دونوں قدریں اعداد ہونی چاہئیں

Key Points — اہم نکات

  • کوشش { ... } پکڑو (غ) { ... } — catch errors
  • آخر { ... } — always runs (cleanup code)
  • پھینکو نیا غلطی("پیغام") — throw an error
  • غ.message — the error message
  • Wrap risky code (type conversion, division, external calls) in کوشش

اردو: کوشش میں خطرناک کوڈ، پکڑو میں غلطی سنبھالیں، آخر صفائی کے لیے۔ پھینکو سے اپنی غلطی بنائیں۔


← Previous: Inheritance | Next: Modules →