الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه mohamedz في 6 سبتمبر 2012 · 1 رد · 1,425 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخطاء

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

الخطأ 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 في 6 سبتمبر 2012 في 18:55

3
#2

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

مواضيع مشابهة