مدیریت خطا در پایتون — به زبان ساده

عکس شاخص مدیریت خطا در پایتون

مدیریت خطا در پایتون «Error handling in Python» یکی از ویژگی‌های مهم است که به برنامه‌نویسان این امکان را می‌دهد که به‌طور مؤثر با خطاها و استثناها برخورد کنند. برای مدیریت خطا در پایتون از بلوک‌های try و except استفاده می‌شود. زمانی که در داخل بلوک try خطایی رخ می‌دهد، اجرای برنامه متوقف می‌شود و به‌طور خودکار به بلوک except منتقل می‌شود. این امر باعث می‌شود که برنامه بدون کرش کردن و با مدیریت مناسب خطاها به اجرای خود ادامه دهد. همچنین، می‌توان در بلوک‌های except پیغام‌های خطا را چاپ کرد یا اقدامات خاصی را برای مدیریت خطا انجام داد. این روش از بروز مشکلات عمده در هنگام اجرای برنامه جلوگیری می‌کند و به افزایش پایداری آن کمک می‌کند.

مقدمه

مدیریت خطا در پایتون یکی از ویژگی‌های کلیدی این زبان است که به برنامه‌نویسان کمک می‌کند تا از وقوع خطاهای ناخواسته در زمان اجرا جلوگیری کنند و رفتار مناسب را برای مواجهه با آن‌ها تعریف کنند. مدیریت خطا در پایتون با استفاده از ساختارهای try , except , else و finally انجام می‌شود. این ساختارها به شما این امکان را می‌دهند که کدهایی را که ممکن است باعث ایجاد خطا شوند، شناسایی کرده و واکنش مناسب برای حل یا ثبت خطا را ارائه دهید. این قابلیت باعث می‌شود برنامه‌ها پایدارتر شوند و تجربه کاربری بهتری ارائه دهند، زیرا به جای توقف ناگهانی برنامه، خطاها مدیریت شده و پیام‌های مناسب به کاربران نمایش داده می‌شوند.

try:
    # Code that may raise an exception
    x = 3 / 0
    print(x)
except:
    # exception occurs, if code under try throws error
    print("An exception occurred.")

خروجی:

An exception occurred.

Try و Except در پایتون

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

مدیریت خطا در پایتوننحو یا Syntax:

try:
    # Some Code
except:
    # Executed if error in the
    # try block

نحوه کار try در پایتون

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

برخی از خطاهای استثنا رایج عبارتند از:

  • IOError: زمانی که فایل قابل باز شدن نباشد.
  • eyboardInterrupt: زمانی که کاربر یک کلید ناخواسته را فشار دهد.
  • ValueError: زمانی که یک تابع داخلی آرگومان نادرستی دریافت کند.
  • OFError: زمانی که به انتهای فایل «End-Of-File» برسیم بدون اینکه داده‌ای خوانده شود.
  • ImportError: زمانی که ماژول موردنظر پیدا نشود.

مثال۱: بدون استثنا، بنابراین بلوک try اجرا می‌شود.

# Python code to illustrate
# working of try() 
def divide(x, y):
    try:
        # Floor Division : Gives only Fractional Part as Answer
        result = x // y
        print("Yeah ! Your answer is :", result)
    except ZeroDivisionError:
        print("Sorry ! You are dividing by zero ")

# Look at parameters and note the working of Program
divide(3, 2)

خروجی:

Yeah ! Your answer is : 1

در این مثال، چون هیچ استثنایی رخ نمی‌دهد، پیام «This is inside the try block» در ابتدا چاپ شده و سپس پیام «No exception occurred. The try block ran successfully» نیز نمایش داده می‌شود.

مثال۲: یک استثنا وجود دارد، بنابراین فقط بلوک except اجرا می‌شود.

# Python code to illustrate
# working of try() 
def divide(x, y):
    try:
        # Floor Division : Gives only Fractional Part as Answer
        result = x // y
        print("Yeah ! Your answer is :", result)
    except ZeroDivisionError:
        print("Sorry ! You are dividing by zero ")

# Look at parameters and note the working of Program
divide(3, 0)

خروجی:

Sorry ! You are dividing by zero 

در این مثال، چون تقسیم بر صفر انجام می‌شود، استثنای ZeroDivisionError رخ می‌دهد و پیام «An error occurred: division by zero» نمایش داده می‌شود. بلوک else اجرا نخواهد شد.

مثال۳: روش دیگر نوشتن عبارت except، که فقط استثناهایی را که قصد دارید آنها را بگیرید، قبول می‌کند یا می‌توانید بررسی کنید که کدام خطا رخ داده است.

# code
def divide(x, y):
    try:
        # Floor Division : Gives only Fractional Part as Answer
        result = x // y
        print("Yeah ! Your answer is :", result)
    except Exception as e:
       # By this way we can know about the type of error occurring
        print("The error is: ",e)

        
divide(3, "GFG") 
divide(3,0)

خروجی:

The error is:  unsupported operand type(s) for //: 'int' and 'str'
The error is:  integer division or modulo by zero

در این مثال، چون فایل وجود ندارد، استثنای FileNotFoundError رخ می‌دهد و پیام «The file does not exist» چاپ می‌شود. اگر خطای دیگری غیر از این رخ می‌داد، بلوک except Exception اجرا می‌شد.

عبارت Else در پایتون

عبارت Else در پایتون، در بلوک try-except به شما این امکان را می‌دهد که کدی را بنویسید که فقط در صورتی اجرا شود که هیچ استثنایی در بلوک try رخ ندهد. به عبارت دیگر، اگر هیچ خطایی در بلوک try ایجاد نشود، بلوک else اجرا می‌شود. این ویژگی به ویژه زمانی مفید است که بخواهید عملیات خاصی را تنها در صورتی که هیچ خطا پیش نیاید، انجام دهید. بلوک else باید بعد از تمام بلوک‌های except قرار گیرد و معمولاً برای انجام کارهایی استفاده می‌شود که پس از اجرای موفقیت‌آمیز عملیات اولیه (بدون خطا) نیاز به انجام آن‌ها دارید.

نحو یا سینتکس:

try:
    # Some Code
except:
    # Executed if error in the
    # try block
else:
    # execute if no exception

مثال:

# Program to depict else clause with try-except
 
# Function which returns a/b
def AbyB(a , b):
    try:
        c = ((a+b) // (a-b))
    except ZeroDivisionError:
        print ("a/b result in 0")
    else:
        print (c)
 
# Driver program to test above function
AbyB(2.0, 3.0)
AbyB(3.0, 3.0)

خروجی:

-۵.۰
a/b result in 0

کلمه کلیدی Finally در پایتون

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

نحو یا سینتکس:

try:
    # Some Code
except:
    # Executed if error in the
    # try block
else:
    # execute if no exception
finally:
    # Some code .....(always executed)
# Python program to demonstrate finally 
   
# No exception Exception raised in try block 
try: 
    k = 5//0 # raises divide by zero exception. 
    print(k) 
   
# handles zerodivision exception     
except ZeroDivisionError:    
    print("Can't divide by zero") 
       
finally: 
    # this block is always executed  
    # regardless of exception generation. 
    print('This is always executed')

خروجی:

Can't divide by zero
This is always executed

نتیجه گیری

پایتون ابزارهای قدرتمندی برای شناسایی و مدیریت خطا در پایتون را در زمان اجرا فراهم می‌آورد. استفاده از ساختارهای try, except, else, و finally به برنامه‌نویسان این امکان را می‌دهد که به‌طور موثر با خطاهای احتمالی برخورد کنند و از توقف ناگهانی برنامه جلوگیری کنند. این ویژگی‌ها به بهبود پایداری و قابلیت اعتماد برنامه کمک می‌کنند و به جای نمایش پیام‌های خطای پیچیده به کاربران، امکان ارائه پیام‌های مفهومی و کاربرپسند را فراهم می‌آورد. در نهایت، مدیریت خطا در پایتون به برنامه‌نویسان این امکان را می‌دهد که برنامه‌های مقاوم‌تر و قابل نگهداری‌تری ایجاد کنند.


سوالات متداول


چرا باید از مدیریت خطا در پایتون استفاده کنیم؟

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

چه تفاوتی بین try و except وجود دارد؟

try(بلوکی است که کدهایی که ممکن است باعث خطا شوند، در آن قرار می‌گیرند.) except(بلوکی است که به‌عنوان واکنش به خطاهای موجود در بلاک try اجرا می‌شود.)

آیا می‌توان از finally استفاده کرد؟

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

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 0 از 0 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
geeksforgeeks مجله پی استور w3schools python

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



برچسب‌ها:
برنامه نویسی پایتون پایتون


پیمایش به بالا