مدیریت استثناءها - دانشگاه صنعتی شریف

Download Report

Transcript مدیریت استثناءها - دانشگاه صنعتی شریف

‫بهنام خالق خِرد‬
‫مبانی برنامه سازی‬
‫‪F UNDAMENTALS OF P ROGRAMMING‬‬
‫مدرس‪ :‬بینظیر بیگلری‬
‫جلسه ‪ :25‬مدیریت استثناءها‬
‫دانشکده مهندسی کامپیوتر‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی‬
‫شریف‬
‫عناوین‬
‫‪2‬‬
‫‪ ‬کارکرد استثناءها‬
‫‪ ‬مدیریت استثناءها‬
‫‪ ‬دستورات ‪try-except‬‬
‫‪‬‬
‫دستور ‪finally‬‬
‫(فصل ‪ 19‬از کتاب اصلی)‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫استثناءها‬
‫‪3‬‬
‫‪ ‬وقتی یک خطای زمان اجرا رخ میدهد‪ ،‬یک شیء ‪( exception‬استثناء) به وجود‬
‫میآید‪ .‬اجرای برنامه متوقف میشود و در این زمان‪ ،‬پایتون پیامی را نمایش میدهد که‬
‫استثنائی که رویداده است را توصیف میکند‪.‬‬
‫‪ ‬یکی از خطاهای زمان اجرا‪ ،‬تقسیم بر صفر است‪:‬‬
‫‪ ‬یا وقتی که به عنصری از لیست میخواهید دسترسی داشته باشید که در آن وجود ندارد‪:‬‬
‫‪ ‬یا میخواهید یک عنصر چندتایی را مقداردهی کنید‪:‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫گرفتن استثناءها‬
‫(‬
‫‪CATCHING‬‬
‫‪) EXCEPTIONS‬‬
‫‪4‬‬
‫‪ ‬در هریک از موارد ذکرشده‪ ،‬پیام خطا از دو بخش تشکیل شدهاست‪ :‬نوع خطا (قبل از‬
‫’‪ )‘:‬و توصیف آن خطا که بعد از ’‪ ‘:‬میآید‪.‬‬
‫‪ ‬گاهی هم عملی را که اجرا میکنیم احتمال بروز استثناء دارد و در عین حال‬
‫نمیخواهیم اجرای برنامه متوقف شود آنگاه به استثناء رسیدگی میکنیم (به کمک‬
‫دستور ‪ )try‬که قسمتی از کد را که در آن این احتمال وجود دارد در این بلوک قرار‬
‫میدهیم‪.‬‬
‫‪ ‬به عنوان مثال اگر بخواهیم فایلی را با هدف خواندن باز کنیم در حالیکه وجود ندارد‬
‫استثناء رخمیدهد حاال ما میخواهیم به آن رسیدگی کنیم‪:‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫دستورات‬
‫‪TRY - EXCEPT‬‬
‫‪ ‬دستور ‪ ،try‬سه جزء جداگانه دارد‪:‬‬
‫‪5‬‬
‫‪try … except … finally‬‬
‫‪ ‬دو جزء ‪ except‬و ‪ finally‬میتوانند حذف شوند (جزء اجباری نیستند)‪.‬‬
‫‪ ‬دستور ‪ try‬دستورات اولین بلوک (‪ )statements_A‬را اجرا و نظارت میکند؛ اگر هیچ‬
‫استثنائی رخ نداد از بلوک ‪ except‬میپرد ولی اگر استثنائی رویداده بود دستورات‬
‫‪try:‬‬
‫موجود در بلوک ‪ )statements_B( except‬را اجرا میکند و ادامه میدهد‪.‬‬
‫‪statements_A‬‬
‫‪except:‬‬
‫‪statements_B‬‬
‫‪ ‬میتوان از چندین بلوک ‪ except‬برای رسیدگی به انواع مختلف استثناءها استفاده کرد‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫دستورات‬
‫دانشکده مهندسی کامپیوتر‬
‫‪TRY - EXCEPT‬‬
‫جلسه ‪25‬‬
‫( ادامه )‬
‫‪6‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫کنترل وجود فایل‬
‫‪7‬‬
‫‪ ‬ما این قابلیت را در یک تابع‪ ،‬کپسوله میکنیم (‪ )exists‬که نام فایل را میگیرد و اگر‬
‫فایل موجود بود ‪ True‬برمیگرداند و اگر نبود ‪ False‬را‪.‬‬
‫‪ ‬میخواهیم به این سؤال پاسخ دهیم‪« :‬آیا فایل مورد نظر وجود دارد؟» اگر این فایل‬
‫وجود داشته باشد ممکن است اجازه بازکردن برای ما صادر نشدهباشد‪.‬‬
‫‪ ‬پایتون ماژولی مهیا کردهاست‪ os.path :‬که تعدادی تابع مفید در اختیار ما میگذارد‬
‫تا بتوانیم با مسیرها‪ ،‬دایرکتوریها و فایلها کار کنیم‪:‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫ایجاد استثناء خودمان‬
‫‪8‬‬
‫‪ ‬آیا برنامه ما میتواند عمدا خودش تولید استثناءکند؟ اگر برنامه ما شرایط خطا را‬
‫تشخیص دهد میتوانیم یک استثناء تولید کنیم (‪.)raise an exception‬‬
‫‪‬‬
‫این تابع‪ ،‬سن را از ورودی دریافت میکند و اگر عدد‬
‫منفی وارد شده بود یک استثناء تولید میکند‪.‬‬
‫‪‬‬
‫در خط پنجم‪ ،‬یک شیء استثناء از نوع ‪ValueError‬‬
‫ایجاد میشود و وقتی شرط برقرار باشد تابع‪ ،‬این شیء‬
‫را به عنوان مقدار بازگشتی برمیگرداند‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مثالی از‬
‫‪EXCEPT‬‬
‫و‬
‫‪RAISE‬‬
‫‪9‬‬
‫متد ‪ ،strip‬اگر آرگومان نداشته باشد از ابتدا و انتهای رشته کاراکترهای سفید را‬
‫برمیدارد و اگر آرگومان داشته باشد هر ترکیبی از آن کاراکترها را از ابتدا و انتهای‬
‫رشته حذف میکند‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫جزء‬
‫‪FINALLY‬‬
‫از دستور‬
‫‪10‬‬
‫‪TRY‬‬
‫‪ ‬یک الگوی متداول برنامهنویسی‪ ،‬دستیابی به یک نوع منبع خاص است که این دستیابی‬
‫میتواند استثنائی هم تولید کند یا حتی بدون هیچ گونه مشکلی به کار خود ادامه دهد‪.‬‬
‫(مثل ایجاد یک پنجره برای الکپشت؛ یا دسترسی به اینترنت؛ یا بازکردن یک فایل با‬
‫هدف نوشتن)‬
‫‪ ‬بعد از استفاده منبع میخواهیم آن را آزاد کنیم (‪( )clean up‬مثل بستن پنجره‪ ،‬قطع‬
‫اتصال اینترنتی‪ ،‬بستن فایل) جزء ‪ finally‬از دستور ‪ try‬همین کار را میکند‪.‬‬
‫‪ ‬در حقیقت چه با بروز استثناء یا با اجرای موفقیتآمیز میخواهیم چگونگی خاتمه‬
‫برنامه را در ‪ finally‬خودمان تعیین کنیم‪.‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مثال‬
‫‪FINALLY‬‬
‫‪11‬‬
‫ولی اگر کاربر یک رشته‬
‫وارد کند که قابل تبدیل به‬
‫‪ int‬نباشد یا صفحه را‬
‫ببندد؟؟؟‬
‫چه در حالت عادی یا با وجود استثناء ما میخواهیم که صفحه‬
‫بسته شود و چگونگی رسیدگی به استثناء در ‪ excrpt‬مشخص‬
‫میشود‪.‬‬
‫این تابع سه بار فراخوانی میشود‪ .‬که هر کدام یک پنجره‬
‫ایجاد میکند که تعداد اضالع ‪-n‬ضلعی منتظم را از کاربر‬
‫میپرسد‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مثال دیگری از‬
‫دانشکده مهندسی کامپیوتر‬
‫‪FINALLY‬‬
‫جلسه ‪25‬‬
‫‪12‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫تمرین‬
‫‪13‬‬
‫‪ ‬تمرین ‪ 1‬از فصل ‪ 19‬کتاب (صفحه ‪)265‬‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫ادامه مطلب در جلسه بعد‬
‫‪14‬‬
‫رفع اشکال و مثال‬
‫دانشکده مهندسی کامپیوتر‬
‫جلسه ‪25‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬