ویژگی تصویر

مدیریت خطاها (try…except) در Python

  /  پایتون   /  مدیریت خطاها در پایتون
بنر تبلیغاتی الف

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

با استفاده از مکانیزم مدیریت خطاها، می‌توانید برنامه‌های خود را بهبود ببخشید و امنیت آن را نیز افزایش بدهید.

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

بلاک try به شما اجازه می‌دهد یک بلاک کد را برای بررسی خطاها تست کنید.

بلاک except به شما اجازه می‌دهد با خطا برخورد کنید و آن را مدیریت کنید.

بلاک else به شما امکان می‌دهد کدی را اجرا کنید که در صورت بروز خطا اجرا نشده است.

بلاک finally به شما اجازه می‌دهد کدی را اجرا کنید، بدون توجه به نتیجه بلاک try و except.

مدیریت استثناء (Exception Handling)

مدیریت استثناء یا Exception Handling در پایتون، فرآیندی است که به شما اجازه می‌دهد با خطاها و استثنائاتی که در حین اجرای برنامه رخ می‌دهند برخورد کنید. در هنگام اجرای برنامه، ممکن است با مواردی مانند خطاهای نامعتبر، خطاهای دسترسی به فایل، خطاهای عملیاتی و غیره روبرو شوید. این خطاها ممکن است منجر به ناپایداری برنامه و توقف غیرمنتظره آن شوند. برای مقابله با این خطاها و جلوگیری از توقف ناخواسته برنامه، از مدیریت استثناء استفاده می‌شود.

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

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

مثال

در اینجا بلاک try یک استثناء ایجاد می‌کند، زیرا x تعریف نشده است.

تماشا در حالت تمام صفحه

خروجی:

An exception occurred

از آنجا که بلاک try یک خطا را ایجاد می‌کند، بلاک except اجرا خواهد شد.

بدون وجود بلاک try، برنامه به خطا برخورد کرده و یک خطا را برمی‌گرداند.

مثال

در اینجا ما سعی می کنیم مقدار متغیر x را که تعریف نشده است چاپ کنیم:

print(x)

خروجی یک خطا چیزی شبیه به این خواهد بود:

Traceback (most recent call last):
  File "demo_try_except_error.py", line 3, in 
    print(x)
NameError: name 'x' is not defined

استثناء‌های متعدد

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

مثال

در این مثال اگر بلاک try یک NameError را ایجاد کند، یک پیام خاص و برای سایر خطاها پیام دیگری را چاپ می کنیم:

تماشا در حالت تمام صفحه

خروجی:

Variable x is not defined

بلاک else

همچنین می توانید بلاک else را تعریف کنید که اگر هیچ خطایی ایجاد نشد این بلاک اجرا شود.

مثال

در این مثال، بلاک try هیچ خطایی ایجاد نمی‌کند:

تماشا در حالت تمام صفحه

خروجی:

Hello
Nothing went wrong

بلاک finally

بلاک finally، در صورت تعیین، بدون توجه به اینکه بلاک try یک خطا ایجاد کند یا نکند، اجرا خواهد شد.

مثال

در اینجا بلاک finally در هر صورت اجرا خواهد شد:

تماشا در حالت تمام صفحه

خروجی:

Something went wrong
The 'try except' is finished

بلاک finally برای بستن object ها و پاکسازی منابع می تواند مفید باشد.

مثال

در این مثال تلاش می کنیم داخل فایلی که قابل نوشتن نیست (محدودیت دارد) یک متن را بنویسیم:

تماشا در حالت تمام صفحه

خروجی:

Something went wrong when writing to the file

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

در پایتون، کلمه کلیدی `raise` برای ایجاد و پرتاب یک استثناء (exception) استفاده می‌شود. با استفاده از `raise` می‌توانید یک استثناء را به صورت دستی ایجاد کرده و آن را در جریان اجرای برنامه پرتاب کنید.

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

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

استفاده از `raise` به شما امکان می‌دهد استثناء‌های مخصوص خود را ایجاد کرده و در جریان اجرای برنامه، براساس شرایط خاص، آن‌ها را پرتاب کنید.

مثال

در این مثال اگر مقدار x کمتر از صفر باشد، یک خطا (error) را ایجاد و برنامه را متوقف می کنیم.

تماشا در حالت تمام صفحه

خروجی:

Traceback (most recent call last):
  File "demo_ref_keyword_raise.py", line 4, in 
    raise Exception("Sorry, no numbers below zero")
Exception: Sorry, no numbers below zero

مثال

در صورتی که x یک عدد صحیح نباشد، یک خطای نوع (TypeError) را ایجاد می کنیم:

تماشا در حالت تمام صفحه

خروجی:

Traceback (most recent call last):
  File "demo_ref_keyword_raise2.py", line 4, in 
    raise TypeError("Only integers are allowed")
TypeError: Only integers are allowed

آیا این مطلب برای شما مفید بود ؟

خیر
بله
بنر تبلیغاتی ج