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

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

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





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





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





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

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

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



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

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

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





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

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

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





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

try:
'code to be executed'
except:
'error message'

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

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

هذا مثال:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

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

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

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

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

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

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

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

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

الموضوعات ذات الصلة: مبادئ البرمجة الأساسية يجب أن يعرفها كل مبرمج

طرد أمازون لم يصل ولكن يقول تم التسليم

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

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

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

Output: Operation successfull! The results are: 7, 6.0, and 1.4

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

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

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

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

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

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

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

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

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

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

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

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

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

print(FloatError)
Output:

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

print(FloatError)
Output: NameError: name 'FloatError' is not defined

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

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

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

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

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

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

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

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

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

المزيد من Idowu Omisola

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

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

انقر هنا للاشتراك