## رفع الاستثناءات (Raising Exceptions)
أحياناً تريد أنت أن تُثير خطأ عمداً عند حدوث حالة غير مقبولة.
### رفع استثناء: ```python raise ExceptionType("رسالة الخطأ") ```
### إنشاء استثناء مخصص: ```python class ValidationError(Exception): pass
class AgeError(ValueError): def __init__(self, age): super().__init__(f"العمر {age} غير صالح") self.age = age ```
### متى ترفع استثناءات؟ - عند تلقي مدخلات غير صالحة - عند حدوث حالة مستحيلة منطقياً - لإخبار من استدعى الدالة بالخطأ بوضوح
| 1 | def set_age(age): |
| 2 | if not isinstance(age, int): |
| 3 | raise TypeError("العمر يجب أن يكون عدداً صحيحاً") |
| 4 | if age < 0 or age > 150: |
| 5 | raise ValueError(f"العمر {age} غير صالح (0-150)") |
| 6 | return age |
| 7 | |
| 8 | try: |
| 9 | valid_age = set_age(-5) |
| 10 | except ValueError as e: |
| 11 | print(f"خطأ في التحقق: {e}") |
مثال 1: استثناء مخصص
| 1 | class InsufficientBalanceError(Exception): |
| 2 | def __init__(self, balance, amount): |
| 3 | self.balance = balance |
| 4 | self.amount = amount |
| 5 | super().__init__( |
| 6 | f"الرصيد غير كافٍ: لديك {balance} وتريد سحب {amount}" |
| 7 | ) |
| 8 | |
| 9 | def withdraw(balance, amount): |
| 10 | if amount > balance: |
| 11 | raise InsufficientBalanceError(balance, amount) |
| 12 | return balance - amount |
| 13 | |
| 14 | try: |
| 15 | new_balance = withdraw(500, 1000) |
| 16 | except InsufficientBalanceError as e: |
| 17 | print(e) |