الأخطاء
سنتعرف الأن على بعض الأخطاء التي يمكن أن تصادفها في بايثون.
الخطأ 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
الدرس الرابع : الجملة الشرطية if
الدرس السادس : الكائنات متعددة العناصر (الجزء الأول)
الدرس السابع : الكائنات متعددة العناصر (الجزء الثاني)
الدرس الثامن : الحلقات loops (الجزء الأول)
الدرس التاسع : الحلقات loops (الجزء الثاني)
الفصل الثاني : Functions & Procedures
الدرس العاشر : الدوال Function
الدرس الحادي عشر : دوال بايثون الجاهزة
الفصل الثالث : البرمجة الكائنية المنحى oop
الدرس الثاني عشر : رابط لتعلم البرمجة الكائنية المنحى
الفصل الرابع : الأخطاء و الإستثناءات Errors, Exceptions
الدرس الثالث عشر : التعامل مع الأخطاء (الجزء الأول)
الدرس الرابع عشر : التعامل مع الأخطاء (الجزء الثاني)
الفصل الخامس :
