مدیریت خطا و استثناها در پایتون

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی پایتون 7 مارس 2025
اشتراک گذاری

خطاها و استثناها (Exceptions) بخش جدایی‌ناپذیر برنامه‌نویسی هستند. اگر یک برنامه بدون مدیریت خطا اجرا شود، ممکن است در شرایط نامطلوب متوقف شود و تجربه‌ی کاربری بدی ایجاد کند. پایتون ابزارهای قدرتمندی برای مدیریت خطاها دارد که به ما اجازه می‌دهد برنامه‌هایی پایدارتر و قابل اطمینان‌تر بنویسیم.




1. انواع خطاهای پایتون


در پایتون، خطاها معمولاً به دو دسته‌ی اصلی تقسیم می‌شوند:


الف) خطاهای نحوی (Syntax Errors)


این خطاها به دلیل نقض قواعد نحوی پایتون رخ می‌دهند. این نوع خطاها در زمان اجرای برنامه قابل مدیریت نیستند و باید قبل از اجرای برنامه تصحیح شوند.


مثال:


print('Hello World'  # پرانتز بسته نشده است

خروجی:


SyntaxError: unexpected EOF while parsing

ب) استثناها (Exceptions)


استثناها خطاهایی هستند که در زمان اجرا (Runtime) رخ می‌دهند. برخی از مهم‌ترین آن‌ها عبارتند از:







































نوع خطا توضیح
TypeError زمانی رخ می‌دهد که یک عملیات روی نوع داده نامناسب انجام شود.
ValueError زمانی که مقدار ورودی معتبر نباشد.
IndexError وقتی به اندیسی خارج از محدوده‌ی لیست یا تاپل دسترسی پیدا کنیم.
KeyError زمانی که کلید مورد نظر در دیکشنری وجود نداشته باشد.
ZeroDivisionError وقتی عددی را بر صفر تقسیم کنیم.
FileNotFoundError زمانی که فایل مورد نظر وجود نداشته باشد.
ImportError وقتی یک ماژول وجود ندارد یا قابل بارگذاری نیست.

مثال:


x = 5 + '10'  # TypeError رخ می‌دهد

خروجی:


TypeError: unsupported operand type(s) for +: 'int' and 'str'



2. مدیریت خطاها با try-except


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


مثال:


try:
num = int(input('یک عدد وارد کنید: '))
print(f'عدد شما: {num}')
except ValueError:
print('خطا: لطفاً یک عدد صحیح وارد کنید!')

نمونه ورودی و خروجی:


یک عدد وارد کنید: abc
خطا: لطفاً یک عدد صحیح وارد کنید!

مدیریت چندین استثنا


می‌توان چندین نوع خطا را به‌طور هم‌زمان مدیریت کرد:


try:
num = int(input('یک عدد وارد کنید: '))
result = 10 / num
print(result)
except ValueError:
print('خطا: مقدار ورودی عدد صحیح نیست!')
except ZeroDivisionError:
print('خطا: تقسیم بر صفر مجاز نیست!')



3. استفاده از finally و raise


الف) finally


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


مثال:


try:
file = open('data.txt', 'r')
content = file.read()
except FileNotFoundError:
print('فایل یافت نشد!')
finally:
print('اجرای بلوک finally')
if 'file' in locals():
file.close()

ب) raise


از raise برای ایجاد استثناهای سفارشی یا گزارش خطاها به‌صورت دستی استفاده می‌شود.


مثال:


def تقسیم(a, b):
if b == 0:
raise ZeroDivisionError('تقسیم بر صفر امکان‌پذیر نیست!')
return a / b
try:
print(تقسیم(10, 0))
except ZeroDivisionError as e:
print(f'خطا: {e}')

خروجی:


خطا: تقسیم بر صفر امکان‌پذیر نیست!



4. ایجاد Exceptionهای سفارشی


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


مثال:


class NegativeNumberError(Exception):
"""خطای مربوط به ورودی عدد منفی"""
def __init__(self, value):
super().__init__(f'مقدار {value} عدد منفی است که مجاز نیست!')
def جذر(x):
if x < 0:
raise NegativeNumberError(x)
return x ** 0.5
try:
print(جذر(-9))
except NegativeNumberError as e:
print(f'خطا: {e}')

خروجی:


خطا: مقدار -9 عدد منفی است که مجاز نیست!



نتیجه‌گیری



  • خطاهای پایتون به دو دسته‌ی SyntaxError و Exception تقسیم می‌شوند.

  • با استفاده از try-except می‌توان خطاها را مدیریت کرد.

  • finally برای اجرای کدهای ضروری در هر شرایطی مفید است.

  • raise برای ایجاد خطاهای سفارشی به کار می‌رود.

  • می‌توانیم با ارث‌بری از Exception، استثناهای مخصوص خود را طراحی کنیم.


با این روش‌ها، برنامه‌های ما پایدارتر و حرفه‌ای‌تر خواهند بود! 🚀

نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.