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

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

هنا ، سنلقي نظرة على كيفية التعامل مع الاستثناءات في Python.

كيف تعمل معالجة الاستثناءات في بايثون

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

لإثارة استثناء في Python ، ستطلب من Python محاولة تشغيل كتلة معينة من التعليمات البرمجية. إذا فشلت هذه الكتلة ، فيمكنك حينئذٍ مطالبة Python برفع استثناء محدد إلى الشفرة الفاشلة.

متى يجب استخدام الاستثناءات في برمجة بايثون؟

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

instagram viewer

لذلك ، يجب عليك استخدام الاستثناءات عندما تختبر الكود بشكل كافٍ ، وأنت متأكد من أنها تعمل. في النهاية ، من الأفضل استخدامها للتعامل مع الأخطاء المحتملة التي قد تنشأ من طرف المستخدم بدلاً من الكود نفسه.

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

التعامل مع استثناءات بايثون

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

يبدو مفهوم ترميز استثناءات Python بشكل عام كما يلي:

يحاول:
"رمز ليتم تنفيذه"
يستثني:
"رسالة خطأ"

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

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

هذا مثال:

يحاول:
طباعة (9 + 6)
يستثني:
طباعة ("رسالة خطأ")
أخيرا:
طباعة ("الرجاء إعادة التشغيل")
انتاج:
15
الرجاء إعادة التشغيل

في الكود أعلاه ، الرجاء إعادة التشغيل يعمل بشكل مستمر ، بغض النظر عما إذا كان هناك استثناء أم لا.

ان آخر يمكن أن يتبع الشرط أيضًا يستثني بيان:

يحاول:
ج = 2 + ب
يستثني:
طباعة ("يجب تعريف B")
آخر:
print (u "تمت الإضافة بنجاح! النتيجة هي٪ s "٪ (C))
انتاج: يجب تعريف ب

الآن حاول مرة أخرى مع تحديد "ب":

يحاول:
ب = 5
ج = 2 + ب
يستثني:
طباعة ("يجب تعريف B")
آخر:
print (u "تمت الإضافة بنجاح! النتيجة هي٪ s "٪ (C))
انتاج: اضيف بنجاح! النتيجة هي 7

الأمثلة المذكورة أعلاه هي استثناءات غير قياسية. ولكن يمكن أن يكون لديك استثناء أكثر وضوحًا عندما تجمع بين الاستثناءات المضمنة (المحددة) والاستثناءات غير المعيارية:

يحاول:
ج = 2 + ب
باستثناء NameError مثل Error:
طباعة (يخطئ ، ":" ، "يجب تعريف B ، من فضلك")
آخر:
print (u "تمت الإضافة بنجاح! النتيجة هي٪ s "٪ (C))
انتاج: لم يتم تعريف الاسم "ب": يجب تعريف "ب" من فضلك

يتحقق الاستثناء أعلاه أولاً مما إذا كان هناك ملف الاسم خطأ في ال يحاول منع. ثم يطبع المعيار الاسم خطأ الاستثناء أولاً ("الاسم" ب "لم يتم تعريفه"). ويدعمها مع استثناءك المكتوب ("B بحاجة إلى تعريف ، من فضلك").

متعلق ب: مبادئ البرمجة الأساسية يجب أن يعرفها كل مبرمج

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

يحاول:
ب = 5
ج = 2 + ب
D = تعويم (6)
F = 7/0
باستثناء NameError مثل Error:
طباعة (يخطئ ، ":" ، "يجب تعريف B ، من فضلك")
باستثناء ValueError كـ val:
print (val، ":"، "لا يمكنك تحويل تلك البيانات")
باستثناء ZeroDivisionError مثل zeroerr:
print (zeroerr، ":"، "لا يمكنك قسمة رقم على صفر")
آخر:
print (u "العملية الناجحة! النتائج هي:٪ s و٪ s و٪ s "٪ (C، D، F))
انتاج: القسمة على صفر: لا يمكنك قسمة رقم على صفر

ماذا لو كانت القسمة صحيحة؟ على سبيل المثال ، استبدال F = 7/0 في الكود أعلاه مع F = 7/5 يعطي:

انتاج: نجحت العملية! النتائج هي: 7 و 6.0 و 1.4

استثناءات يحددها المستخدم في بايثون

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

ومع ذلك ، لا يزال كل استثناء يحدده المستخدم (بشكل مباشر أو غير مباشر) يأتي من المدمج استثناء فئة بايثون.

يشير رمز المثال أدناه إلى القاعدة استثناء مباشرة عن طريق الاتصال خطا وقت التشغيل منه:

class connectError (RuntimeError):
def __init __ (ذاتي ، قيمة):
self.value = القيمة
يحاول:
رفع اتصال خطأ ("اسم مضيف غير صالح")
باستثناء خطأ في الاتصال كخطأ:
طباعة (err.value)
انتاج: اسم مضيف غير صالح

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

متعلق ب: دليل المبتدئين للتعبيرات العادية باستخدام بايثون

يمكنك عمل استثناء معرّف من قبل المستخدم عن طريق اشتقاقه مباشرة من ملف استثناء الفئة الأساسية. ومع ذلك ، فإن الاستثناء أدناه يمنع طرح 5 من 6 ويستدعي الاستثناء من الفئة الأساسية مباشرة:

أخطاء الفصل (استثناء):
نجاح
فئة sixFiveError (أخطاء):
def __init __ (ذاتي ، قيمة ، رسالة):
self.value = القيمة
self.message = رسالة
يحاول:
رفع sixFiveError (6-5، "هذا الاستبدال غير مسموح به")
باستثناء sixFiveError مثل e:
طباعة ("كان هناك خطأ:" ، رسالة إلكترونية)
انتاج: حدث خطأ: هذا الاستبدال غير مسموح به

في الممارسة العملية ، يمكنك استخدام استثناء قمت بتعريفه مسبقًا من خلال استدعائه في وظيفة أخرى. على سبيل المثال ، يمكنك إنشاء ملف تعويم خطأ يسمح فقط بإضافة عوامين:

# اتصل أولاً بفئات الاستثناء الأساسية:
أخطاء الفصل (استثناء):
نجاح
# بعد ذلك ، استخرج الاستثناء الخاص بك من الفئة الأساسية:
فئة FloatError (أخطاء):
def __init __ (ذاتي ، قيمة ، رسالة):
self.value = القيمة
self.message = رسالة
# قم بإنشاء دالة لإضافة عوامين:
def addTwoFloat (أ ، ب):
إذا (اكتب (أ) واكتب (ب))! = تعويم:
رفع FloatError (a + b، "يجب أن تكون الأرقام عائمة لإضافتها")
آخر:
طباعة (أ + ب)
addTwoFloat (4، 7)
انتاج: __main __. FloatError: (11 ، "يجب أن تكون الأرقام عائمة لإضافتها")

لأنك قمت الآن بتعريف ملف FloatError class ، تقوم Python برفعها إذا حاولت إضافة حرفية غير عائمة باستخدام addtwoFloat وظيفة.

يمكنك طباعة ملف FloatError class في نفس ملف Python حيث قمت بإنشائه لمعرفة ما يحدث:

طباعة (خطأ عائم)
انتاج:

FloatError، مع ذلك ، ليس استثناءً مضمنًا في Python. يمكنك التحقق من ذلك عن طريق الاتصال FloatError في ملف Python جديد آخر حيث لم تقم بإنشاء هذه الفئة:

طباعة (خطأ عائم)
انتاج: NameError: لم يتم تعريف الاسم "FloatError"

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

يمكنك أيضًا محاولة التحديد الذاتي لفئات الخطأ الأخرى لمعرفة كيفية أدائها.

اجعل برامج Python أكثر سهولة في الاستخدام مع استثناءات

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

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

بريد إلكتروني
كيفية تصحيح كود بايثون الخاص بك

جهز نفسك بالمعرفة اللازمة لسحق كل خطأ في Python في طريقك.

اقرأ التالي

مواضيع ذات صلة
  • برمجة
  • بايثون
  • دروس الترميز
عن المؤلف
إيدوو أوميسولا (82 مقالة منشورة)

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

المزيد من Idowu Omisola

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

خطوة أخرى أيضا…!

يرجى تأكيد عنوان بريدك الإلكتروني في البريد الإلكتروني الذي أرسلناه لك للتو.

.