جلسه سی و هفتم

حل نمونه سوال کنترل خطاها و استثنائات

مثال 2: برنامه تقسیم دو عدد بنویس تا زمانی که کاربر عبارت q را وارد کند(با کنترل خطای تقسیم بر صفر).

این برنامه یک ماشین حساب ساده است که امکان تقسیم دو عدد را به کاربر می‌دهد. برنامه به شرح زیر کار می‌کند:

1. در ابتدا، برنامه پیغامی را چاپ می‌کند که از کاربر می‌خواهد دو عدد وارد کند و اطلاع می‌دهد که کاربر می‌تواند با تایپ حرف ‘q’ از برنامه خارج شود.

2. برنامه سپس وارد یک حلقه while True می‌شود که تا زمانی که کاربر ‘q’ را وارد نکرده است، به اجرای خود ادامه می‌دهد.

3. در هر تکرار حلقه، برنامه از کاربر دو عدد را دریافت می‌کند. اگر کاربر ‘q’ را وارد کند، حلقه با استفاده از دستور break متوقف می‌شود.

4. پس از دریافت دو عدد، برنامه تلاش می‌کند آن‌ها را به اعداد صحیح تبدیل کند و سپس آن‌ها را تقسیم کند.

5. اگر در این فرآیند خطای ZeroDivisionError رخ دهد (تلاش برای تقسیم بر صفر)، برنامه پیغام مربوطه را چاپ می‌کند.

6. در صورت عدم بروز خطا، نتیجه تقسیم چاپ می‌شود.

این برنامه به کاربر امکان می‌دهد تا به طور مداوم دو عدد را وارد کرده و آن‌ها را تقسیم کند. همچنین با استفاده از حرف ‘q’، کاربر می‌تواند به راحتی از برنامه خارج شود.

تصمیم گیری برای گزارش کدام خطاها:

کد خوب نوشته شده و به درستی تست شده مستعد خطاهای داخلی مانند خطاهای نحوی یا منطقی نیست. اما هر بار که برنامه شما به چیزی خارجی مانند ورودی کاربر یا وجود یک فایل وابسته است، امکان ایجاد یک استثنا وجود دارد.

این به شما بستگی دارد که چگونه خطاها را به کاربران خود منتقل کنید. گاهی اوقات کاربران باید بدانند که آیا یک فایل گم شده است یا خیر. گاهی اوقات بهتر است که خطا را در سکوت مدیریت کنید. کمی تجربه به شما کمک می کند تا بدانید چقدر باید گزارش دهید.

گاهی اوقات شما می خواهید برنامه شما در صورت مواجهه با خطا، بدون گزارش خطا به کاربر، به اجرا ادامه دهد. استفاده از عبارت pass در یک بلوک else به شما این امکان را می دهد.

مثال 3: استفاده از عبارت pass در بلوک else

کد رسیدگی به استثنا باید استثناهای خاصی را که انتظار دارید در طول اجرای برنامه شما اتفاق بیفتد را بگیرد. یک بلوک بدون جز همه استثناها را می‌گیرد، از جمله وقفه‌های صفحه‌کلید و خروج‌های سیستمی که ممکن است هنگام بستن برنامه به اجبار نیاز داشته باشید.

اگر می‌خواهید از یک بلوک try استفاده کنید و مطمئن نیستید که کدام استثنا را بگیرید، از Exception استفاده کنید. اکثر استثناها را می گیرد، اما همچنان به شما اجازه می دهد برنامه ها را عمداً قطع کنید.

1.از بلوک‌های خالی except استفاده نکنید

2. به جای آن از Exception استفاده کنید

3. چاپ استثنا(هنگامی که نوع ارورمان را نمیدانیم.)