مدیریت استثناءها - دانشگاه صنعتی شریف
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
مبانی برنامهسازی -دانشگاه صنعتی شریف