آموزش مدیریت استثنا در برنامه نویسی پایتون 3

3 سال پیش
امتیاز دهید post

آموزش مدیریت استثنا در برنامه نویسی پایتون 3

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش مدیریت استثنا در برنامه نویسی پایتون 3 خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون و جنگو

پایتون دو ویژگی بسیار مهم را برای مدیریت هرگونه خطای غیرمنتظره در برنامه‌های پایتون شما و افزودن قابلیت‌های اشکال زدایی در آن‌ها فراهم می‌کند.

مدیریت استثنا (Exception Handling) – این مورد در این آموزش پوشش داده خواهد شد. در اینجا لیستی از استثناهای استاندارد موجود در پایتون وجود دارد – استثناهای استاندارد.

ادعاها – این در آموزش ادعاها در پایتون 3 پوشش داده می شود.

استثناهای استاندارد

در اینجا لیستی از استثناهای استاندارد موجود در پایتون آمده است. –

1 Exception

کلاس پایه برای همه استثناها

2 StopIteration

زمانی که متد ()next یک تکرار کننده به هیچ شیئی اشاره نمی کند افزایش می یابد.

3 SystemExit

توسط تابع ()sys.exit مطرح شده است.

4 StandardError

کلاس پایه برای همه استثناهای داخلی به جز StopIteration و SystemExit.

5 ArithmeticError

کلاس پایه برای تمام خطاهایی که برای محاسبه عددی رخ می دهد.

6 OverflowError

هنگامی که یک محاسبه از حداکثر حد مجاز برای یک نوع عددی فراتر می رود، افزایش می یابد.

7 FloatingPointError

وقتی محاسبه ممیز شناور با شکست مواجه می شود، افزایش می یابد.

8 ZeroDivisonError

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

9 AssertionError

در صورت شکست عبارت Assert مطرح می شود.

10 AttributeError

در صورت عدم موفقیت مرجع یا تخصیص مشخصه افزایش می یابد.

11 EOFError

زمانی که هیچ ورودی از تابع ()raw_input یا ()input وجود نداشته باشد و به انتهای فایل رسیده باشد، افزایش می یابد.

12 ImportError

هنگامی که یک بیانیه واردات ناموفق است، افزایش می یابد.

13 KeyboardInterrupt

هنگامی که کاربر اجرای برنامه را قطع می کند، معمولاً با فشار دادن Ctrl+c افزایش می یابد.

14 LookupError

کلاس پایه برای همه خطاهای جستجو.

15 IndexError

هنگامی که یک شاخص در یک دنباله یافت نمی شود، افزایش می یابد.

16 KeyError

هنگامی که کلید مشخص شده در فرهنگ لغت یافت نمی شود، افزایش می یابد.

17 NameError

هنگامی که یک شناسه در فضای نام محلی یا جهانی یافت نمی شود، افزایش می یابد.

18 UnboundLocalError

هنگام تلاش برای دسترسی به یک متغیر محلی در یک تابع یا روش، اما هیچ مقداری به آن اختصاص داده نشده است، افزایش می یابد.

19 EnvironmentError

کلاس پایه برای تمام استثناهایی که خارج از محیط پایتون رخ می دهند.

20 IOError

هنگامی که عملیات ورودی/خروجی با شکست مواجه می‌شود، مانند عبارت print یا تابع ()open هنگام تلاش برای باز کردن فایلی که وجود ندارد، افزایش می‌یابد.

21 OSError

برای خطاهای مربوط به سیستم عامل افزایش یافته است.

22 SyntaxError

هنگامی که خطایی در نحو پایتون وجود دارد، افزایش می یابد.

23 IndentationError

زمانی که تورفتگی به درستی مشخص نشده باشد، بلند می شود.

24 SystemError

هنگامی که مفسر یک مشکل داخلی پیدا می کند، مطرح می شود، اما وقتی با این خطا مواجه می شود، مفسر پایتون خارج نمی شود.

25 SystemExit

هنگامی که مفسر پایتون با استفاده از تابع ()sys.exit  خارج می شود، افزایش می یابد. اگر در کد مدیریت نشود، باعث خروج مفسر می شود.

26 TypeError

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

27 ValueError

زمانی که تابع داخلی برای یک نوع داده دارای آرگومان های معتبر باشد، اما آرگومان ها دارای مقادیر نامعتبر تعیین شده باشند، افزایش می یابد.

28 RuntimeError

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

29 NotImplementedError

زمانی مطرح می‌شود که یک متد انتزاعی که باید در یک کلاس ارثی پیاده‌سازی شود، در واقع پیاده‌سازی نشده باشد.

 

ادعاها در پایتون

ساده ترین راه برای فکر کردن به یک ادعا این است که آن را به یک عبارت افزایش اگر (یا به بیان دقیق تر، یک عبارت افزایش اگر نه) تشبیه کنید. یک عبارت آزمایش می شود و اگر نتیجه نادرست باشد، یک استثنا مطرح می شود.

  • ادعاها توسط عبارت assert، جدیدترین کلمه کلیدی پایتون، که در نسخه 1.5 معرفی شده است، انجام می شود.
  • برنامه نویسان اغلب در ابتدای یک تابع برای بررسی ورودی معتبر و پس از فراخوانی تابع برای بررسی خروجی معتبر، اظهارنظرها را قرار می دهند.
  • بیانیه ادعایی
    هنگامی که پایتون با یک عبارت ادعا روبرو می شود، عبارت همراه را ارزیابی می کند که امیدواریم درست باشد. اگر عبارت نادرست باشد، پایتون یک استثناء AssertionError را ایجاد می کند.

اگر ادعا با شکست مواجه شود، پایتون از ArgumentExpression به عنوان آرگومان برای AssertionError استفاده می کند. استثناهای AssertionError را می توان مانند هر استثنای دیگری با استفاده از دستور try-except گرفت و مدیریت کرد. اگر آنها رسیدگی نشوند، برنامه را خاتمه داده و یک ردیابی ایجاد می کنند.

مثال

در اینجا تابعی وجود دارد که دمای معین را از درجه کلوین به درجه فارنهایت تبدیل می کند. از آنجایی که 0 درجه کلوین به همان اندازه سرد است، در صورت مشاهده دمای منفی، تابع از بین می رود.

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

استثنا چیست؟

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

هنگامی که یک اسکریپت پایتون یک استثنا را ایجاد می کند، باید فوراً استثنا را مدیریت کند در غیر این صورت خاتمه می یابد و خارج می شود.

رسیدگی به یک استثنا

اگر کد مشکوکی دارید که ممکن است یک استثنا ایجاد کند، می‌توانید با قرار دادن کد مشکوک در یک امتحان: بلاک، از برنامه خود دفاع کنید. پس از بلوک try:، عبارت استثنا: و به دنبال آن یک بلوک کد که تا حد امکان به زیبایی مشکل را حل می کند، اضافه کنید.

 

در اینجا چند نکته مهم در مورد نحو ذکر شده در بالا آمده است

  • یک دستور try منفرد می تواند چندین دستور به جز داشته باشد. این زمانی مفید است که بلوک try حاوی عباراتی باشد که ممکن است انواع مختلفی از استثناها را ایجاد کنند.
  • شما همچنین می توانید یک بند غیر عمومی ارائه دهید که هر استثنا را کنترل می کند.
  • بعد از بند(های)جز، می توانید یک بند else اضافه کنید. اگر کد موجود در بلوک try: استثنایی ایجاد نکند، کد موجود در بلوک else اجرا می‌شود.
  • other-block مکان خوبی برای کدهایی است که نیازی به محافظت از try: block ندارد.

مثال

این مثال یک فایل را باز می کند، محتوا را در فایل، می نویسد و با زیبایی بیرون می آید زیرا اصلا مشکلی وجود ندارد –

 

این نتیجه زیر را ایجاد می کند –

 

مثال

این مثال سعی می‌کند فایلی را باز کند که در آن مجوز نوشتن ندارید، بنابراین یک استثنا ایجاد می‌کند

 

این نتیجه زیر را ایجاد می کند –

 

 

همچنین می توانید از دستور استثنا بدون هیچ استثنایی که به صورت زیر تعریف شده است استفاده کنید

 

 

این نوع دستور try-except تمام استثناهایی را که رخ می‌دهند را می‌گیرد. استفاده از این نوع عبارت try-except به عنوان یک روش برنامه نویسی خوب در نظر گرفته نمی شود، زیرا همه استثناها را می گیرد اما برنامه نویس را وادار نمی کند که علت اصلی مشکلی که ممکن است رخ دهد را شناسایی کند.

بند جز با استثناهای متعدد

همچنین می‌توانید از همان دستور استثنا برای مدیریت چندین استثنا به صورت زیر استفاده کنید

 

دستور try-finally

می توانید از یک بلوک final: همراه با یک بلوک try: استفاده کنید. در نهایت: بلوک مکانی برای قرار دادن هر کدی است که باید اجرا شود، خواه بلاک try-block استثنایی ایجاد کند یا خیر. نحو دستور try-finally این است –

 

نکته – شما می توانید بند(های)به جز یا یک بند آخر را ارائه دهید، اما نه هر دو را. شما نمی توانید از بند else نیز در کنار یک بند نهایی استفاده کنید.

مثال

 

اگر مجوز باز کردن فایل را در حالت نوشتن ندارید، نتیجه زیر را ایجاد می کند –

 

همین مثال را می توان به صورت زیر به طور واضح تر نوشت –

 

این نتیجه زیر را ایجاد می کند –

 

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

 

آرگومان یک استثنا

یک استثنا می تواند آرگومان داشته باشد، که مقداری است که اطلاعات بیشتری در مورد مشکل می دهد. محتوای استدلال بر اساس استثنا متفاوت است. شما آرگومان یک استثنا را با ارائه یک متغیر در عبارت استثنا به صورت زیر می گیرید

 

اگر کدی را برای رسیدگی به یک استثنا بنویسید، می توانید یک متغیر داشته باشید که نام استثنا را در عبارت استثنا دنبال کند. اگر چندین استثنا را به دام انداخته‌اید، می‌توانید متغیری را دنبال کنید که تاپل استثنا را دنبال کند.

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

مثال

در زیر مثالی برای یک استثنا ارائه شده است

 

این نتیجه زیر را ایجاد می کند –

 

ایجاد یک استثنا

با استفاده از عبارت raise می توانید استثناها را به روش های مختلفی مطرح کنید. نحو کلی دستور raise به صورت زیر است –

 

در اینجا Exception نوع استثنا است (مثلا NameError) و آرگومان مقداری برای آرگومان استثناست. آرگومان اختیاری است. اگر ارائه نشده باشد، آرگومان استثنا None است.

آرگومان نهایی، Traceback، نیز اختیاری است (و به ندرت در عمل استفاده می شود)، و در صورت وجود، شی ردیابی مورد استفاده برای استثنا است.

مثال

یک استثنا می تواند یک رشته، یک کلاس یا یک شی باشد. بیشتر استثناهایی که هسته پایتون ایجاد می کند، کلاس ها هستند، با آرگومان هایی که نمونه ای از کلاس است. تعریف استثناهای جدید بسیار آسان است و به صورت زیر قابل انجام است –

 

نکته – برای گرفتن یک استثنا، یک عبارت “except” باید به همان استثنا اشاره کند که به عنوان یک شی کلاس یا یک رشته ساده پرتاب شده است. به عنوان مثال، برای گرفتن استثنای بالا، باید عبارت استثنا را به صورت زیر بنویسیم

 

مثال زیر استفاده از بالا بردن یک استثنا را نشان می دهد

 

این نتیجه زیر را ایجاد خواهد کرد

 

استثناهای تعریف شده توسط کاربر

پایتون همچنین به شما اجازه می دهد تا با استخراج کلاس ها از استثناهای داخلی استاندارد، استثناهای خود را ایجاد کنید.

در اینجا یک مثال مربوط به RuntimeError است. در اینجا یک کلاس ایجاد می شود که از RuntimeError زیر کلاس بندی می شود. این برای زمانی مفید است که شما نیاز به نمایش اطلاعات خاص تری دارید که یک استثنا وجود دارد.

در بلوک try، استثنا تعریف شده توسط کاربر بالا می‌رود و در بلوک استثنا قرار می‌گیرد. متغیر e برای ایجاد نمونه ای از کلاس Networkerror استفاده می شود.

 

بنابراین هنگامی که کلاس فوق را تعریف کردید، می توانید استثنا را به صورت زیر مطرح کنید –

 

منبع.

 

 

لیست جلسات قبل آموزش برنامه نوبسی پایتون 3

  1. آموزش برنامه نویسی پایتون 3
  2. آموزش موارد جدید در برنامه نویسی پایتون 3
  3. آموزش مرور کلی برنامه نویسی پایتون 3
  4. آموزش راه اندازی محیط برنامه نویسی پایتون 3
  5. آموزش نحو در برنامه نویسی پایتون 3
  6. آموزش انواع متغیرها در برنامه نویسی پایتون 3
  7.  آموزش عملگرهای پایه در برنامه نویسی پایتون 3
  8.  آموزش تصمیم گیری در برنامه نویسی پایتون 3
  9.  آموزش حلقه ها در برنامه نویسی پایتون 3
  10. آموزش اعداد در برنامه نویسی پایتون 3
  11. آموزش رشته ها در برنامه نویسی پایتون 3
  12.  آموزش لیست ها در برنامه نویسی پایتون 3
  13.  آموزش تاپل ها در برنامه نویسی پایتون 3
  14. آموزش دیکشنری در برنامه نویسی پایتون 3
  15.  آموزش تاریخ و زمان در برنامه نویسی پایتون 3
  16.  آموزش توابع در برنامه نویسی پایتون 3
  17. آموزش ماژول ها در برنامه نویسی پایتون 3
  18. آموزش فایل های ورودی/خروجی در برنامه نویسی پایتون 3
امتیاز دهید post
0
برچسب ها :
نویسنده مطلب saber

دیدگاه شما

بدون دیدگاه