• 0
mohamedz

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

سؤال

الأخطاء

سنتعرف الأن على بعض الأخطاء التي يمكن أن تصادفها في بايثون.

الخطأ NameError

يحدث هذا الخطأ عندما تحاول إستخدام إسم لمتغير غير معرف من قبل، مثلا :

>>> a = 5
>>> a = a + b

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
a = a + b
NameError: name 'b' is not defined

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

>>> a = 5
>>> try :
a = a + b
except NameError, e :
print e


name 'b' is not defined

الخطأ TypeError

يحدث هذا الخطأ عند محاولة إجراء عملية حسابية بين متغير رقمي و متغير غير رقمي، مثلا :

>>> print 'str' + 5

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
print 'str' + 5
TypeError: cannot concatenate 'str' and 'int' objects

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

>>> try :
print 'str' + 5
except TypeError, e :
print e


cannot concatenate 'str' and 'int' objects

الخطأ indexError

يحدث هذا الخطأ عندما تتعامل مع الحاويات وتخطأ في تحديد رتبة العنصر، مثلا لديك قائمة بثلاث عناصر و تحاول طبع العنصر 5 :

>>> lang = ["Python", "Ruby","Perl"]
>>> print lang[5]

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
print lang[5]
IndexError: list index out of range

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

>>> lang = ["Python", "Ruby","Perl"]
>>> try :
print lang[5]
except IndexError, e :
print e


list index out of range

الخطأ KeyError

هذا الخطأ متعلق بالقواميس ويحدث عند تحديد مفتاح غير موجود في القاموس، مثلا :

>>> card = {"Name" : "Mohamed" , "Age" : 14}
>>> print card["Sex"]

Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
print card["Sex"]
KeyError: 'Sex'

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

>>> card = {"Name" : "Mohamed" , "Age" : 14}
>>> try :
print card["Sex"]
except KeyError, e :
print "key :", e, "Not Found"


key : 'Sex' Not Found

الخطأ AttributeError

هذا الخطأ مرتبط بالبرمجة الكائنية، ويحدث عندما نسند لصف (class) وضيفة (method) غير مغرفة أو غير موجودة أصلا، مثلا :

>>> class MyClass(object) :
pass

>>> myclass = MyClass()
>>> print myclass.myfunc()

Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
print myclass.myfunc()
AttributeError: 'MyClass' object has no attribute 'myfunc'

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

>>> class MyClass(object) :
pass

>>> myclass = MyClass()
>>> try :
print myclass.myfunc()
except AttributeError, e :
print e


'MyClass' object has no attribute 'myfunc'

إستخدام العبارة else مع العبارة try - except

الصورة العامة :

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

سكربت يشرح إستخدام العبارة else مع العبارة try - except :

#!/usr/bin/python
try :
age = int(raw_input("Please enter your age : "))
x = age + 5
except Exception, e :
print "Error :", e
else :
print "Your age after five years is :", x

العبارة try - except - finally

الصورة العامة :

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

سكربت يشرح إستخدام try - except - finally و else :

#!/usr/bin/python
try :
age = int(raw_input("Please enter your age : "))
x = age + 5
except Exception, e :
print "Error :", e
else :
print "Your age after five years is :", x
finally :
print "Thank you for using this script : "

إستخدام عبارة else أو finally إختياري و ليس إجباري و هذا يرجع لإحتياجات المبرمج لإتمام الكود.

فهرس الدورة

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الفصل الخامس :

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

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

شارك هذا الرد


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

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

  • 0

ممممممممتآآز ما شاء الله عليك

0

شارك هذا الرد


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

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

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



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

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

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