القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس الواحد والثلاثون (الاستثناءات)

دورة البرمجة بلغة بايثون - الدرس الواحد والثلاثون (الاستثنائات والأخطاء)

دورة البرمجة بلغة بايثون - الدرس الواحد والثلاثون (الاستثناءات والأخطاء)

في هذا البرنامج التعليمي ، ستتعرف على أنواع مختلفة من الأخطاء والاستثناءات المضمنة في بايثون. يتم عرضها كلما واجه مترجم بايثون أخطاء.


يمكننا أن نرتكب أخطاء معينة أثناء كتابة برنامج يؤدي إلى أخطاء عندما نحاول تشغيله. ينتهي برنامج بايثون بمجرد أن يواجه خطأ غير معالج. يمكن تصنيف هذه الأخطاء على نطاق واسع إلى فئتين:

  • أخطاء في بناء الجملة
  • أخطاء منطقية (استثناءات)


أخطاء في بناء جملة بايثون

يسمى الخطأ الناجم عن عدم اتباع البنية الصحيحة (بناء الجملة) للغة خطأ في بناء الجملة أو خطأ في التحليل.


لنلق نظرة على مثال واحد:

>>> if a < 3
  File "<interactive input>", line 1
    if a < 3
           ^
SyntaxError: invalid syntax

كما هو موضح في المثال ، يشير السهم إلى مكان تعرض المحلل اللغوي لخطأ في بناء الجملة.


نلاحظ هنا أن النقطتين: مفقود في عبارة if.


أخطاء بايثون المنطقية (استثناءات)

تسمى الأخطاء التي تحدث في وقت التشغيل (بعد اجتياز اختبار بناء الجملة) استثناءات أو أخطاء منطقية.


على سبيل المثال ، تحدث عندما نحاول فتح ملف غير موجود (للقراءة) (FileNotFoundError) ، أو نحاول قسمة رقم على صفر (ZeroDivisionError) ، أو محاولة استيراد وحدة نمطية غير موجودة (ImportError).


كلما حدثت هذه الأنواع من أخطاء وقت التشغيل ، تنشئ بايثون كائنًا استثنائيًا. إذا لم يتم التعامل معه بشكل صحيح ، فإنه يطبع تتبعًا لهذا الخطأ مع بعض التفاصيل حول سبب حدوث هذا الخطأ.


لنلقِ نظرة على كيفية تعامل بايثون مع هذه الأخطاء:

>>> 1 / 0
Traceback (most recent call last):
 File "<string>", line 301, in runcode
 File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero

>>> open("imaginary.txt")
Traceback (most recent call last):
 File "<string>", line 301, in runcode
 File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'


استثناءات بايثون المضمنة

يمكن أن تثير العمليات غير القانونية استثناءات. هناك الكثير من الاستثناءات المضمنة في بايثون والتي يتم عرضها عند حدوث أخطاء مقابلة. يمكننا عرض جميع الاستثناءات المضمنة باستخدام وظيفة ()local المدمجة على النحو التالي:

print(dir(locals()['__builtins__']))

ستعيد locals()['__builtins__'] وحدة من الاستثناءات والوظائف والسمات المضمنة. يتيح لنا dir سرد هذه السمات كسلاسل نصية.


بعض الاستثناءات المضمنة الشائعة في برمجة بايثون بالإضافة إلى الخطأ الذي تسبب فيها مذكورة أدناه:


ExceptionCause of Error
AssertionErrorRaised when an assert statement fails.
AttributeErrorRaised when attribute assignment or reference fails.
EOFErrorRaised when the input() function hits end-of-file condition.
FloatingPointErrorRaised when a floating point operation fails.
GeneratorExitRaise when a generator's close() method is called.
ImportErrorRaised when the imported module is not found.
IndexErrorRaised when the index of a sequence is out of range.
KeyErrorRaised when a key is not found in a dictionary.
KeyboardInterruptRaised when the user hits the interrupt key (Ctrl+C or Delete).
MemoryErrorRaised when an operation runs out of memory.
NameErrorRaised when a variable is not found in local or global scope.
NotImplementedErrorRaised by abstract methods.
OSErrorRaised when system operation causes system related error.
OverflowErrorRaised when the result of an arithmetic operation is too large to be represented.
ReferenceErrorRaised when a weak reference proxy is used to access a garbage collected referent.
RuntimeErrorRaised when an error does not fall under any other category.
StopIterationRaised by next() function to indicate that there is no further item to be returned by iterator.
SyntaxErrorRaised by parser when syntax error is encountered.
IndentationErrorRaised when there is incorrect indentation.
TabErrorRaised when indentation consists of inconsistent tabs and spaces.
SystemErrorRaised when interpreter detects internal error.
SystemExitRaised by sys.exit() function.
TypeErrorRaised when a function or operation is applied to an object of incorrect type.
UnboundLocalErrorRaised when a reference is made to a local variable in a function or method, but no value has been bound to that variable.
UnicodeErrorRaised when a Unicode-related encoding or decoding error occurs.
UnicodeEncodeErrorRaised when a Unicode-related error occurs during encoding.
UnicodeDecodeErrorRaised when a Unicode-related error occurs during decoding.
UnicodeTranslateErrorRaised when a Unicode-related error occurs during translating.
ValueErrorRaised when a function gets an argument of correct type but improper value.
ZeroDivisionErrorRaised when the second operand of division or modulo operation is zero.


إذا لزم الأمر ، يمكننا أيضًا تحديد الاستثناءات الخاصة بنا في بايثون. لمعرفة المزيد عنها ، تفضل بزيارة موقع استثناءات مستخدم بايثون المحددة.


يمكننا التعامل مع هذه الاستثناءات المضمنة والمحددة من قبل المستخدم في بايثون باستخدام جمل try ، باستثناء وأخيراً. لمعرفة المزيد عنها ، تفضل بزيارة Python try, except and finally statements.

reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات