• 0
mohamedz

الدرس الثالث عشر : التعامل مع الأخطاء (الجزء الأول)

سؤال

التعامل مع الأخطاء

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

الأخطاء الإملائية

و هي الأخطاء الكتابية في الشفرة كنسيان حرف أو كتابة عبارة مجهولة لا تحتويها اللغة مثلا عوض أن نكتب else كتبنا elqe أو نسيان النقطتين ':' بعد عبارة if ... إلخ

وهذا النوع من الأخطاء الأسهل في الإكتشاف لأنك بمجرد أن تنفذ البرنامج سيحدد لك المفسر مكان الخطأ فتقوم بتصليحه.

الأخطاء من نوع Run Time

يطلق على الخطأ الذي يحدث أثناء تشغيل البرنامج Run Time Error. هذا النوع من الأخطاء يحدث عندما يحاول البرنامج أن يقوم بعمل لم يصمم البرنامج من أجله. مثلا أن يقوم البرنامج بعملية غير مقبولة Illegal Operation كأن يقوم بعملية جمع بين متغير رقمي و متغير نصي، و مثل هذه الحالات تحدث أخطاء Run Time.

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

مثال لخطأ شهير

هذا السكربت يحاول طبع حاصل قسمة العدد 1 على 0 :

#!/usr/bin/python
print 1 / 0

هذا هو رد بايثون عند تنفيذ السكربت :

Traceback (most recent call last):
File "C:\Documents and Settings\MOHAMED\Bureau\aa.py", line 2, in <module>
print 1 / 0
ZeroDivisionError: integer division or modulo by zero

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

لاحظ السطر التالي :

ZeroDivisionError: integer division or modulo by zero

ZeroDivisionError : هو إسم الخطأ.

integer division or modulo by zero : رسالة الخطأ.

العبارة try - except

يمكنك إستخدام العبارة try -except لمعالجة الأخطاء في شفرتك. منطق هذه العبارة بسيط للغاية، فيمكنك أن تجرب try جزء من الشفرة، فإذا حدث أي إستثناء في الشفرة، ينتقل البرنامج إلى السطور التالية ل except و يقوم بتنفيذ هذه السطور.

معالجة الخطأ : ZeroDivisionError

#!/usr/bin/python
try :
print 1 / 0
except ZeroDivisionError, e :
print e

- في السطر الثاني كتبنا العبارة try وبعدها وضعنا النقطتين ':'.

- في Block الخاص ب try وظعنا الكود print 1 / 0 .

- في السطر الرابع كتبنا العبارة except يليها إسم الخطأ (ZeroDivisionError) يليه الفاصلة ',' يليها المتغير e والذي تحفظ فيه رسالة الخطأ يليه النقطتين ':' .

- في Block الخاص ب except وضعنا الكود print e لطباعة رسالة الخطأ.

عند تنفيذ السكربت لا يتوقف البرنامج بل يطبع لنا رسالة الخطأ :

>>> ================================ RESTART ================================
>>>
integer division or modulo by zero
>>>

الأن نستطيع تحديد الصورة العامة للعبارة try - except :

try :
#-----بداية البلوك-----#
هنا نضع الأوامر التي ستنفذ في الحالة العادية أي إذا لم يحدث الخطأ
#-----نهاية البلوك-----#
except :
#-----بداية البلوك-----#
هنا نضع الأوامر التي ستنفذ عند حدوث خلل في التنفيذ
#-----نهاية البلوك-----#

في بعض الأحيان قد لا تعرف إسم الخطأ لذا ما عليك إلا وضع العبارة Exception بدل إسم الخطأ و المفسر سيحدد الرسالة المناسبة. كالتالي :

#!/usr/bin/python
try :
print 1 / 0
except Exception, e :
print e

في التعديل التالي طبعنا النص ": Error" قبل طباعة رسالة الخطأ.

#!/usr/bin/python
try :
print 1 / 0
except Exception, e :
print "Error :", e

الناتج سيكون كالتالي :

>>> ================================ RESTART ================================
>>>
Error : integer division or modulo by zero
>>>

رسائل الخطأ في بايثون كلها باللغة الإنجليزية فإذا كنت تبرمج برنامج عربي فعليك توقع نوع أو إسم الخطأ و كتابة رسالة تناسبه، كالتالي :

#!/usr/bin/python
# -*- coding: cp1256 -*-
try :
print 1 / 0
except :
print "لا يمكنك القسمة على 0"

هذا هو الناتج عند تنفيذ السكربت :

>>> ================================ RESTART ================================
>>>
لا يمكنك القسمة على 0
>>>

اليوم تعاملنا مع خطأ واحد هو ZeroDivisionError، في الدرس القادم سأعرفكم على بعض الأخطاء الأخرى، ثم أريكم كيفية إستخدام العبارة else مع العبارة try - except، كما ستتعرفون على العبارة try - except - finally، كما سأستعمل بعض السكربتات البسيطة لتسهيل الفهم.

فهرس الدورة

الفصل الاول : أساسيات بايثون

دورة بايثون من الصفر الى الاحتراف

الدرس الاول : أمر الطباعة print + التعليقات

الدرس الثاني : المتغيرات Variables

الدرس الثالث : الإدخال Input

الدرس الرابع : الجملة الشرطية if

الدرس الخامس : المقاطع string

الدرس السادس : الكائنات متعددة العناصر (الجزء الأول)

الدرس السابع : الكائنات متعددة العناصر (الجزء الثاني)

الدرس الثامن : الحلقات loops (الجزء الأول)

الدرس التاسع : الحلقات loops (الجزء الثاني)

إزالة الغموض من الفصل الأول

الفصل الثاني : Functions & Procedures

الدرس العاشر : الدوال Function

الدرس الحادي عشر : دوال بايثون الجاهزة

ملخص الفصل الثاني

الفصل الثالث : البرمجة الكائنية المنحى oop

الدرس الثاني عشر : رابط لتعلم البرمجة الكائنية المنحى

الفصل الرابع : الأخطاء و الإستثناءات Errors, Exceptions

الدرس الثالث عشر : التعامل مع الأخطاء (الجزء الأول)

الدرس الرابع عشر : التعامل مع الأخطاء (الجزء الثاني)

تم تعديل بواسطه mohamedz
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

1 إجابات على هذا السؤال .

  • 0

جزاك الله خيرا

تبارك الله فيك وفي والديك

درس جد مفيد

متابع معاك بصمت..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .