هذا النوع من العبارات هو أسلوب متعدد المعالجة لعبارات ما عدا، دعونا نتعلم تداخل عبارات المحاولة...ما عدا من خلال مثال.
deftest():n=int(input('هناك 3 عبارات للاختبار، يرجى التحديد (1/2/3):')) ifn==1: #keyError Exception my_dict={'dotcpp':123}print ( my_dict['dot'])elifn==2:#IndexError استثناء my_list=[1,2,3,4,5]print(my_list[100])eli fn==3:#NameError استثناء print('متغير dotcpp غير موجود:',dotcpp)try:try:try:test()exceptKeyError:print('استثناء KeyError')exceptIndexError:print('استثناء IndexError')exceptNameError: طباعة ("استثناء خطأ الاسم")
لقد اختبرنا 1/2/3 على التوالي، وكانت نتائج الإخراج كما يلي:
هناك 3 عبارات ليتم اختبارها، يرجى تحديد (1/2/3): 1KeyError استثناء هناك 3 عبارات ليتم اختبارها، يرجى تحديد (1/2/3): 2IndexError استثناء هناك 3 عبارات ليتم اختبارها، يرجى تحديد (1/ 2/3): استثناء 3NameError
في هذا المثال، نقوم أولاً بإدخال حكم n في الدالة المحددة، ثم نعطي ثلاث حالات استثناء بناءً على قيمة n، ثم نقوم بتداخل ثلاث حالات محاولة.. باستثناء العبارات في النهاية، أي نتيجة الدالة سوف تمر عبارة test() بثلاثة مستويات من الحكم.
لا يمكن فصل آلية معالجة الاستثناء الكاملة عن العبارة النهائية . وظيفة هذه العبارة هي أنه بغض النظر عما إذا حدث استثناء في برنامجنا، فسيتم تنفيذ التعليمات البرمجية الموجودة تحت العبارة النهائية بتنسيق بناء الجملة الخاص بها.
حاول:blockexcept[typeerror]:deal1finally:deal2
دعونا نلقي نظرة على هذا الهيكل من خلال مثال:
deftest():n=int(input('الرجاء إدخال عدد صحيح:'))print(n)try:test()exceptKeyError:print('استثناء KeyError')أخيرًا:print('تم تنفيذ البيان أخيرًا')
دعنا ندخل 6 وdotcpp على التوالي لرؤية الإخراج:
الرجاء إدخال عدد صحيح: تم تنفيذ عبارة 55finally الرجاء إدخال عدد صحيح: تم تنفيذ عبارة dotcppfinally Traceback(mostrecentcallllast):FileC:/Users/test.py,line5,in<module> test()FileC:/Users/test.py,line2,intestn=int(input('الرجاء إدخال عدد صحيح:'))ValueError: validliteralforint()withbase10:'dotcpp'
من هذا المثال يمكننا أن نرى أنه سيتم تنفيذ العبارة النهائية بغض النظر عما إذا كان هناك استثناء في برنامجنا.
العبارة الأخيرة التي تعلمناها أعلاه هي عبارة سيتم تنفيذها بغض النظر عما إذا كان هناك استثناء في العبارة، لن يتم تنفيذ عبارة حاول...إلا...إلس التي سنتعلمها أدناه إلا في حالة عدم حدوث أي استثناء في البرنامج. هيكلها النحوي هو:
حاول:blockexcept[typeerror]:deal1else:deal2
دعونا نلقي نظرة على المثال أدناه:
deftest():n=int(input('الرجاء إدخال عدد صحيح:'))print('قيمة الإدخال هي:',n)try:test()exceptValueError:print('ValueError Exception')else:print(' الحالي لم يحدث أي استثناء في البرنامج')
الإخراج هو:
الرجاء إدخال عدد صحيح: 5. قيمة الإدخال هي: 5. لا يوجد استثناء في البرنامج الحالي.
عندما ندخل القيمة dotcpp
الرجاء إدخال عدد صحيح: استثناء dotcppValueError
يمكننا أن نرى أن عبارة else لا يتم تنفيذها عندما يكون البرنامج غير طبيعي. وليس من الصعب التمييز بين هذه العبارات. يمكنك التدرب على عبارات معالجة الاستثناءات شائعة الاستخدام من خلال الأمثلة.