أشهر أنواع الاستثناءات في Python
| نوع الخطأ | السبب الشائع | مثال |
|---|---|---|
| ValueError | قيمة غير صالحة | int('abc') |
| TypeError | نوع غير صالح | "نص" + 5 |
| ZeroDivisionError | قسمة على صفر | 10 / 0 |
| FileNotFoundError | الملف غير موجود | open('x.txt') |
| KeyError | مفتاح غير موجود | d['missing'] |
| IndexError | فهرس خارج النطاق | lst[100] |
| NameError | متغير غير معرّف | print(x) |
| AttributeError | خاصية غير موجودة | "txt".nonexistent() |
## معالجة الاستثناءات (Exception Handling)
الاستثناءات هي أخطاء تحدث أثناء تنفيذ البرنامج. Python تتيح اقتناصها والتعامل معها بدلاً من توقف البرنامج.
### الصيغة الكاملة: ```python try: # الكود الذي قد يسبب خطأ except ExceptionType as e: # معالجة الخطأ except (TypeError, ValueError): # معالجة أنواع متعددة else: # يُنفَّذ إذا لم يحدث خطأ finally: # يُنفَّذ دائماً ```
### أشهر أنواع الاستثناءات: - **ValueError**: قيمة غير صالحة - **TypeError**: نوع غير صالح - **ZeroDivisionError**: القسمة على صفر - **FileNotFoundError**: الملف غير موجود - **KeyError**: المفتاح غير موجود في dict - **IndexError**: الفهرس خارج النطاق - **NameError**: متغير غير معرّف
| 1 | try: |
| 2 | age = int(input("أدخل عمرك: ")) |
| 3 | result = 100 / age |
| 4 | except ValueError: |
| 5 | print("خطأ: أدخل رقماً صحيحاً!") |
| 6 | except ZeroDivisionError: |
| 7 | print("خطأ: العمر لا يمكن أن يكون صفراً!") |
| 8 | except Exception as e: |
| 9 | print(f"خطأ غير متوقع: {e}") |
| 10 | else: |
| 11 | print(f"النتيجة: {result:.2f}") |
| 12 | finally: |
| 13 | print("انتهى البرنامج") |
مثال 1: قراءة ملف بأمان
| 1 | def read_file_safe(filename): |
| 2 | try: |
| 3 | with open(filename, "r", encoding="utf-8") as f: |
| 4 | return f.read() |
| 5 | except FileNotFoundError: |
| 6 | print(f"الملف '{filename}' غير موجود") |
| 7 | return None |
| 8 | except PermissionError: |
| 9 | print("لا يوجد صلاحية للوصول للملف") |
| 10 | return None |
| 11 | |
| 12 | content = read_file_safe("data.txt") |
| 13 | if content: |
| 14 | print(content) |
مثال 2: التحقق من مدخلات المستخدم
| 1 | def get_valid_number(prompt, min_val, max_val): |
| 2 | while True: |
| 3 | try: |
| 4 | num = int(input(prompt)) |
| 5 | if min_val <= num <= max_val: |
| 6 | return num |
| 7 | else: |
| 8 | print(f"الرقم يجب أن يكون بين {min_val} و {max_val}") |
| 9 | except ValueError: |
| 10 | print("خطأ: أدخل رقماً صحيحاً!") |
| 11 | |
| 12 | age = get_valid_number("أدخل عمرك (1-120): ", 1, 120) |
| 13 | print(f"عمرك: {age}") |