رموز أخطاء بايثون
رموز أخطاء بايثون هي مجموعة من الاستثناءات والإشارات التي ترفعها لغة بايثون عند مواجهة البرنامج لمواقف غير متوقعة أثناء التنفيذ. فهم هذه الرموز مهم جدًا للمطورين المتقدمين لأنه يسمح بتصحيح الأخطاء بدقة، وإدارة الاستثناءات بشكل صحيح، وتصميم برمجيات قابلة للصيانة. تظهر الأخطاء عند وجود انتهاك لقواعد اللغة، أو عدم تطابق أنواع البيانات، أو فقدان الموارد، أو أخطاء منطقية. من الأمثلة الشائعة على الأخطاء المضمنة: SyntaxError
، TypeError
، و KeyError
، بالإضافة إلى الاستثناءات المخصصة التي يحددها المطورون للتعامل مع الحالات الخاصة بالتطبيق. من خلال دراسة رموز أخطاء بايثون، يمكن للمطورين تحديد سبب فشل البرنامج بسرعة، وتطبيق استراتيجيات إدارة استثناءات مناسبة باستخدام كتل try/except
، وتسجيل معلومات تشخيصية مفيدة لأنظمة الإنتاج. هذه المعرفة ضرورية في تطوير البرمجيات الخلفية، حيث يمكن للأخطاء غير المعالجة أن تؤدي إلى توقف الخدمة، أو فقدان البيانات، أو ثغرات أمنية. في هذا المرجع، سيتعلم القارئ جميع الأخطاء الشائعة، وأسباب ظهورها، وتقنيات تصحيح الأخطاء، وأفضل الممارسات لإدارة الاستثناءات وإنشاء تطبيقات قوية ومستقرة.
تخيل خدمة خلفية تقرأ مدخلات المستخدم، وتتعامل مع الملفات، وتتواصل مع قاعدة البيانات. يمكن أن تظهر أخطاء مثل FileNotFoundError
، ValueError
، أو ZeroDivisionError
أثناء التنفيذ. يوفر التعامل الصحيح مع الأخطاء استمرار عمل التطبيق بسلاسة حتى في الحالات غير المتوقعة. يمكن استخدام كتلة try
لتغليف العمليات التي قد تفشل، في حين تلتقط كتل except
الاستثناءات المحددة للتعامل معها بشكل مناسب. باستخدام عدة كتل except
، يمكن للمطورين تخصيص الاستجابة لكل نوع خطأ، وتسجيل معلومات التصحيح، وتوفير آليات بديلة عند الحاجة. بالإضافة إلى ذلك، تضمن كتل finally
تنفيذ العمليات الحرجة مثل إغلاق الملفات أو اتصالات قاعدة البيانات مهما حدث. هذا النمط لا يمنع الأعطال فحسب، بل يعزز أيضًا موثوقية وصيانة الأنظمة. تعتبر هذه الممارسات أساسية في الأنظمة الخلفية الواقعية، حيث يؤثر التعامل الصحيح مع الأخطاء مباشرة على استقرار النظام وأدائه وثقة المستخدمين.
Example
pythondef process_data():
try:
# NameError: محاولة استخدام متغير غير معرف
print(undefined_variable)
# ZeroDivisionError: قسمة على صفر
result = 10 / 0
# ValueError: تحويل غير صالح
number = int("abc")
# FileNotFoundError: محاولة فتح ملف غير موجود
with open("non_existent_file.txt", "r") as f:
content = f.read()
# AttributeError: استدعاء طريقة غير موجودة
[].appendx(1)
except NameError as ne:
print(f"تم التقاط NameError: {ne}")
except ZeroDivisionError as zde:
print(f"تم التقاط ZeroDivisionError: {zde}")
except ValueError as ve:
print(f"تم التقاط ValueError: {ve}")
except FileNotFoundError as fe:
print(f"تم التقاط FileNotFoundError: {fe}")
except AttributeError as ae:
print(f"تم التقاط AttributeError: {ae}")
except Exception as e:
print(f"تم التقاط استثناء عام: {e}")
finally:
print("تنفيذ عمليات التنظيف إذا لزم الأمر.")
process_data()
📊 Comprehensive Reference
Error | Description | When It Occurs | Example | Notes |
---|---|---|---|---|
SyntaxError | خطأ في بناء الجملة | كتابة كود بايثون غير صالح | eval('x === 2') |
يحدث أثناء التحويل البرمجي |
IndentationError | خطأ في المسافة البادئة | عدم تطابق المسافات البادئة | if True:\nprint("Hi") |
فرع من SyntaxError |
TabError | خلط بين التابات والمسافات | خلط علامات التبويب والمسافات | <tab> <space> print("Hi") |
نادراً إذا تم الحفاظ على التنسيق |
NameError | متغير أو دالة غير معرفة | استخدام متغير غير معرف | print(x) |
يتم اكتشافه غالباً مبكراً |
TypeError | عملية على نوع خاطئ | جمع int + str | 5 + "5" |
شائع في البرمجة الديناميكية |
ValueError | قيمة غير صحيحة | تحويل سلسلة غير صالحة إلى int | int("abc") |
يجب التحقق من صحة المدخلات |
IndexError | فهرس قائمة غير صالح | الوصول إلى عنصر خارج النطاق | lst = []; lst[1] |
التحقق من طول القائمة قبل الفهرسة |
KeyError | مفتاح قاموس غير موجود | الوصول إلى مفتاح غير موجود | d = {}; d['x'] |
استخدام dict.get() لتجنب الخطأ |
AttributeError | استدعاء خاصية غير موجودة | الكائن لا يحتوي على الخاصية | [].appendx(1) |
أخطاء شائعة بسبب أخطاء كتابة الاسم |
ZeroDivisionError | قسمة على صفر | 10 / 0 |
التحقق من المقسوم عليه قبل القسمة | |
ImportError | الوحدة غير موجودة | import non_module |
التأكد من وجود الوحدة | |
ModuleNotFoundError | الوحدة غير موجودة | import non_existent_module |
فرع من ImportError | |
FileNotFoundError | ملف غير موجود | فتح ملف غير موجود | open("nofile.txt") |
التحقق من مسار الملف |
IsADirectoryError | المسار ملف بينما توقع مجلد | open("folder") |
خاص بأنظمة التشغيل | |
NotADirectoryError | المسار مجلد بينما توقع ملف | os.listdir("file.txt") |
خاص بأنظمة التشغيل | |
PermissionError | نقص صلاحيات | محاولة الوصول لملف بدون إذن | open("/root/file") |
التحقق من صلاحيات المستخدم |
OSError | خطأ نظام التشغيل | أخطاء عامة في النظام | os.remove("/root/file") |
فئة أساسية للعديد من الأخطاء |
OverflowError | الرقم أكبر من الحد | نتيجة حسابية كبيرة | 2.0**10000 |
نادراً في بايثون 3 |
RecursionError | تجاوز عمق الاستدعاء | استدعاء دالة بشكل متكرر | def f(): f(); f() |
يمكن تعديل الحد باستخدام sys.setrecursionlimit() |
MemoryError | نفاد الذاكرة | محاولة تخصيص ذاكرة كبيرة | a = 'a' * 10**10 |
يعتمد على حجم النظام |
StopIteration | نفاد العناصر في iterator | استخدام next على iterator فارغ | next(iter([])) |
يتم استخدامه في iterators مخصصة |
AssertionError | فشل التحقق | assert False |
لتأكيد شروط معينة | |
FloatingPointError | خطأ حسابي عشري | عمليات FP غير صالحة | numpy.seterr(all='raise') |
نادراً، عادة مع numpy |
UnicodeError | فشل الترميز/فك الترميز | "ü".encode("ascii") |
التحقق من الترميزات | |
UnicodeDecodeError | فشل فك الترميز | b'\xff'.decode('utf-8') |
شائع عند قراءة الملفات | |
UnicodeEncodeError | فشل الترميز | "ü".encode("ascii") |
التحقق من الترميزات | |
RecursionWarning | تحذير الاستدعاء العميق | import warnings |
عادةً ليس خطأً حرجًا | |
DeprecationWarning | استخدام ميزة قديمة | warnings.warn("deprecated") |
يساعد في الترقية | |
RuntimeWarning | تحذير وقت التشغيل | import warnings |
مشكلات محتملة أثناء التنفيذ | |
FutureWarning | ميزة ستتغير | warnings.warn("future") |
التحضير للإصدارات القادمة | |
UserWarning | تحذير عام | warnings.warn("user") |
رسائل تحذير مخصصة | |
PendingDeprecationWarning | ميزة ستصبح قديمة | warnings.warn("pending") |
نادراً ما يُستخدم | |
ResourceWarning | المورد لم يتم تحريره | open("file") |
بايثون 3+ | |
ArithmeticError | فشل حسابي | int("x")/0 |
فئة أساسية للأخطاء الحسابية | |
BufferError | خطأ في الذاكرة المؤقتة | memoryview(b'').release() |
نادراً | |
ConnectionError | فشل الاتصال بالشبكة | requests.get("bad_url") |
فئة أساسية لأخطاء الشبكة | |
BrokenPipeError | كتابة إلى pipe مغلق | os.write(fd, b'data') |
خاص بأنظمة Unix | |
ChildProcessError | فشل عملية فرعية | os.waitpid(-1) |
نادراً | |
EOFError | نهاية ملف غير متوقعة | input() EOF |
يحدث عند مدخلات فارغة | |
EnvironmentError | مشكلة بيئية | خطأ على مستوى النظام | فئة أساسية لـ OSError | |
GeneratorExit | إغلاق generator | gen.close() |
يحدث داخل generator | |
IOError | فشل إدخال/إخراج | open("/root/file") |
دمج مع OSError في بايثون 3 | |
InterruptedError | تم مقاطعة عملية النظام | os.read(fd, 0) |
خاص بأنظمة Unix | |
LookupError | خطأ في البحث | d['x'] |
فئة أساسية | |
ReferenceError | مرجع ضعيف غير صالح | import weakref |
نادراً | |
RuntimeError | خطأ وقت التشغيل | raise RuntimeError() |
عام | |
StopAsyncIteration | انتهاء async iterator | async for |
بايثون 3.5+ | |
SyntaxWarning | تحذير بناء الجملة | warnings.warn("syntax") |
لا يوقف البرنامج | |
SystemError | خطأ داخلي في بايثون | sys._getframe(0) |
نادراً | |
SystemExit | استدعاء خروج البرنامج | sys.exit() |
يخرج من البرنامج | |
TabError | خلط بين tabs و spaces | <tab><space> |
التأكد من التنسيق | |
TimeoutError | انتهاء مهلة العملية | socket.settimeout() |
عمليات الشبكة |
📊 Complete Properties Reference
Error | Exception Type | Default Behavior | Description | Compatibility |
---|---|---|---|---|
SyntaxError | Exception | يتوقف البرنامج | خطأ في بناء الجملة | جميع إصدارات بايثون |
IndentationError | SyntaxError | يتوقف البرنامج | خطأ في المسافات البادئة | جميع الإصدارات |
TabError | IndentationError | يتوقف البرنامج | خلط بين علامات التبويب والمسافات | جميع الإصدارات |
NameError | Exception | يتوقف البرنامج | متغير أو دالة غير معرفة | جميع الإصدارات |
TypeError | Exception | يتوقف البرنامج | عملية على نوع خاطئ | جميع الإصدارات |
ValueError | Exception | يتوقف البرنامج | قيمة غير صحيحة للعملية | جميع الإصدارات |
IndexError | Exception | يتوقف البرنامج | فهرس غير صالح | جميع الإصدارات |
KeyError | Exception | يتوقف البرنامج | مفتاح قاموس غير موجود | جميع الإصدارات |
AttributeError | Exception | يتوقف البرنامج | استدعاء خاصية غير موجودة | جميع الإصدارات |
ZeroDivisionError | ArithmeticError | يتوقف البرنامج | قسمة على صفر | جميع الإصدارات |
ImportError | Exception | يتوقف البرنامج | الوحدة غير موجودة | جميع الإصدارات |
ModuleNotFoundError | ImportError | يتوقف البرنامج | الوحدة غير موجودة | بايثون 3.6+ |
FileNotFoundError | OSError | يتوقف البرنامج | ملف غير موجود | بايثون 3+ |
IsADirectoryError | OSError | يتوقف البرنامج | المسار ملف بينما توقع مجلد | بايثون 3+ |
NotADirectoryError | OSError | يتوقف البرنامج | المسار مجلد بينما توقع ملف | بايثون 3+ |
PermissionError | OSError | يتوقف البرنامج | نقص صلاحيات | بايثون 3+ |
OSError | Exception | يتوقف البرنامج | أخطاء نظام التشغيل | جميع الإصدارات |
OverflowError | ArithmeticError | يتوقف البرنامج | الرقم أكبر من الحد | جميع الإصدارات |
RecursionError | RuntimeError | يتوقف البرنامج | تجاوز عمق الاستدعاء | بايثون 3+ |
MemoryError | Exception | يتوقف البرنامج | نفاد الذاكرة | جميع الإصدارات |
StopIteration | Exception | يتوقف البرنامج | نفاد العناصر في iterator | جميع الإصدارات |
AssertionError | Exception | يتوقف البرنامج | فشل التحقق | جميع الإصدارات |
FloatingPointError | ArithmeticError | يتوقف البرنامج | خطأ حسابي عشري | جميع الإصدارات |
UnicodeError | ValueError | يتوقف البرنامج | فشل الترميز/فك الترميز | جميع الإصدارات |
UnicodeDecodeError | UnicodeError | يتوقف البرنامج | فشل فك الترميز | جميع الإصدارات |
UnicodeEncodeError | UnicodeError | يتوقف البرنامج | فشل الترميز | جميع الإصدارات |
RecursionWarning | Warning | يستمر البرنامج | تحذير الاستدعاء العميق | جميع الإصدارات |
DeprecationWarning | Warning | يستمر البرنامج | استخدام ميزة قديمة | جميع الإصدارات |
RuntimeWarning | Warning | يستمر البرنامج | تحذير وقت التشغيل | جميع الإصدارات |
FutureWarning | Warning | يستمر البرنامج | ميزة ستتغير | جميع الإصدارات |
UserWarning | Warning | يستمر البرنامج | تحذير عام | جميع الإصدارات |
PendingDeprecationWarning | Warning | يستمر البرنامج | ميزة ستصبح قديمة | جميع الإصدارات |
ResourceWarning | Warning | يستمر البرنامج | المورد لم يتم تحريره | بايثون 3+ |
ArithmeticError | Exception | يتوقف البرنامج | فشل حسابي | جميع الإصدارات |
BufferError | Exception | يتوقف البرنامج | خطأ في الذاكرة المؤقتة | جميع الإصدارات |
ConnectionError | OSError | يتوقف البرنامج | فشل الاتصال بالشبكة | بايثون 3+ |
BrokenPipeError | OSError | يتوقف البرنامج | كتابة إلى pipe مغلق | بايثون 3+ |
ChildProcessError | OSError | يتوقف البرنامج | فشل عملية فرعية | بايثون 3+ |
EOFError | Exception | يتوقف البرنامج | نهاية ملف غير متوقعة | جميع الإصدارات |
EnvironmentError | OSError | يتوقف البرنامج | مشكلة بيئية | بايثون 3+ |
GeneratorExit | Exception | يتوقف البرنامج | إغلاق generator | جميع الإصدارات |
IOError | OSError | يتوقف البرنامج | فشل إدخال/إخراج | بايثون 3+ |
InterruptedError | OSError | يتوقف البرنامج | تم مقاطعة عملية النظام | بايثون 3+ |
LookupError | Exception | يتوقف البرنامج | خطأ في البحث | جميع الإصدارات |
ReferenceError | Exception | يتوقف البرنامج | مرجع ضعيف غير صالح | بايثون 3+ |
RuntimeError | Exception | يتوقف البرنامج | خطأ وقت التشغيل | جميع الإصدارات |
StopAsyncIteration | Exception | يتوقف البرنامج | انتهاء async iterator | بايثون 3.5+ |
SyntaxWarning | Warning | يستمر البرنامج | تحذير بناء الجملة | جميع الإصدارات |
SystemError | Exception | يتوقف البرنامج | خطأ داخلي في بايثون | جميع الإصدارات |
SystemExit | Exception | خروج البرنامج | استدعاء sys.exit() | جميع الإصدارات |
TimeoutError | OSError | يتوقف البرنامج | انتهاء مهلة العملية | بايثون 3+ |
UnboundLocalError | NameError | يتوقف البرنامج | متغير محلي مستخدم قبل تعيينه | بايثون 3+ |
ZeroDivisionError | ArithmeticError | يتوقف البرنامج | قسمة على صفر | جميع الإصدارات |
🧠 اختبر معرفتك
Test Your Knowledge
اختبر معرفتك برموز أخطاء بايثون
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى