آموزش مدیریت خطا در پایتون

شقایق ستیه نیا
1402/11/11
668
آموزش مدیریت خطا در پایتون

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

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

در این سفر، ما به بررسی عمیق Syntax Error و Exception پرداخته و با استفاده از ابزارهایی همچون try-except، دستور finally و raise، به شما خواهیم آموخت چگونه این چالش‌ها را مدیریت کنید.

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

Exception چیست؟

مدیریت خطا در پایتون

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

در اینجا ما با یک موقعیت استثنایی روبرو شدیم! به اصطلاح، Exception در پایتون به هر نوع اتفاق غیرمعمول یا خارج از مرتبه عادت اطلاق می‌شود. حالا اگر ما این را به زبان برنامه‌نویسی منتقل کنیم، استثناء یک وضعیت ویژه است که در طول اجرای یک برنامه رخ می‌دهد و ممکن است توسط برنامه قابل مدیریت باشد.

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

syntax error چیست؟

مدیریت خطا در پایتون

سینتکس ارور (Syntax Error) یک نوع خطا در برنامه‌نویسی است که از آنجا ناشی می‌شود که برنامه نوشته شده به درستی به زبان برنامه‌نویسی مشخص شده تعبیر نمی‌شود.

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

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

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

تفاوت exception و syntax error در پایتون

مدیریت خطا در پایتون

تفاوت اصلی بین Exception و Syntax Error در پایتون به ماهیت خطاها مربوط می‌شود:

Syntax Error

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

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

Exception

این خطاها در زمان اجرای برنامه به وقوع می‌پیوندند و نشان‌دهنده مشکلاتی هستند که در اجرای برنامه پیش می‌آیند. به عبارت دیگر، برنامه با مشکلی مواجه می‌شود که برنامه‌نویس به صورت مستقیم می‌تواند از آن آگاه شود. این خطاها در حین اجرای برنامه رخ می‌دهند و ممکن است برنامه تا یک نقطه خاص از اجرا به درستی پیش برود. به طور مثال اگر شما یک لیست دارای ۳ عنصر داشته باشید و درخواست کنید عنصر چهارم آن را چاپ کند، یک استثناء نوع IndexError پیش می آید.

بنابراین، Syntax Error مربوط به خطاهای نحوی در زمان کدنویسی است، در حالی که Exception مربوط به خطاهای اجرایی در زمان اجرای برنامه است.

انواع خطا در پایتون

مدیریت خطا در پایتون

در ادامه باهم انواع syntax error در پایتون را برسی میکنیم:

نام خطا توضیح
SyntaxError خطا در ساختار دستورات پایتون
NameError متغیر یا تابعی که به آن اشاره شده است تعریف نشده است
TypeError نوع داده‌ای که به یک عملگر یا تابع داده شده است صحیح نیست
ValueError مقداری که به یک عملگر یا تابع داده شده است صحیح نیست
IndexError دسترسی به عنصری از یک آرایه یا شیء غیرمجاز است
KeyError دسترسی به کلیدی از یک دیکشنری غیرمجاز است
AttributeError دسترسی به ویژگی‌ای از یک شیء غیرمجاز است
FileNotFoundError فایلی که قصد باز کردن آن را دارید وجود ندارد
PermissionError دسترسی به فایل یا دایرکتوری مورد نظر مجاز نیست
OSError خطایی در سیستم عامل رخ داده است
MemoryError حافظه کافی برای اجرای برنامه وجود ندارد
RecursionError یک تابع به طور نامحدود در حال فراخوانی خود است
StopIteration یک حلقه به انتهای خود رسیده است
KeyboardInterrupt کاربر با فشردن کلید Ctrl+C اجرای برنامه را متوقف کرده است
SystemExit برنامه به طور دستی توسط کاربر متوقف شده است
AssertionError دستور assert شکست خورده است
AttributeError دسترسی به ویژگی‌ای از یک شیء غیرمجاز است
EOFError انتهای فایل رسیده است
FloatingPointError خطایی در محاسبات اعشاری رخ داده است
GeneratorExit یک ژنراتور به طور دستی توسط کاربر متوقف شده است

مدیریت خطا در پایتون

مدیریت خطا در پایتون

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

بلوک try-except به شکل زیر است:

try:
    # کدی که ممکن است با خطا مواجه شود
except:
    # کدی برای رسیدگی به خطا

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

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

انواع روش های مدیریت خطا در پایتون

مدیریت خطا در پایتون

حالا به بررسی پنج دستور اصلی برای مدیریت خطا، یعنی raise، try، except، else و finally می‌پردازیم:

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

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

دستور finally برای مدیریت خطا در پایتون

مدیریت خطا در پایتون

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

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

try:
    with open("my_file.txt", "r") as f:
        print(f.read())
finally:
    f.close()

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

  • برای بستن یک اتصال به پایگاه داده
  • برای آزاد کردن منابع شبکه
  • برای انجام پاکسازی پس از اتمام یک تراکنش

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

دستور raise در پایتون برای مدیریت خطا

مدیریت خطا در پایتون

دستور raise در پایتون برای ایجاد یک استثنا استفاده می شود. استثناها اعلان هایی هستند که به برنامه می گویند که چیزی اشتباه شده است. می توان آنها را برای نشان دادن اشکالات، خطاهای کاربر یا شرایط غیرمنتظره استفاده کرد.

برای استفاده از دستور raise، باید نام یک کلاس استثنا را به عنوان آرگومان به آن بدهید. همچنین می توانید یک پیام خطا به عنوان آرگومان اضافی اضافه کنید.

برای ایجاد یک خطا با استفاده از دستور raise، کافی است نام یک کلاس استثنا را به عنوان آرگومان آن قرار دهیم.

# raise ایجاد خطا با استفاده از دستور
raise ValueError("این مقدار صحیح نیست.")

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

فرض کنید یک تابع داریم که یه عدد صحیح رو به عنوان ورودی می‌گیرد و آن را به یک عدد اعشاری تبدیل می‌کند. اگه کاربر عدد صحیحی وارد نکند، تابع باید یک خطا ایجاد کند.

def to_float(n):
     try:
        return float(n)
     except ValueError:
raise # ایجاد خطا با استفاده از دستور  
         raise ValueError("این مقدار صحیح نیست.")

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

چند مثال دیگر از کاربردهای دستور raise:

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

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

دستور else برای مدیریت خطا در پایتون

مدیریت خطا در پایتون

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

# دریافت عدد از کاربر
try:
    n = int)input("لطفاً یک عدد وارد کنید: "))
except:
    # رسیدگی به خطا
    print("خطایی رخ داده است.")
else:
    # انجام کاری در صورتی که هیچ خطا رخ ندهد
    Print(“عدد وارد شده است”)

در این مثال، اگر کاربر عددی وارد نکند، خطای ValueError رخ خواهد داد. در این صورت، بلوک except اجرا می‌شود و پیام خطا «خطایی رخ داده است» را چاپ می‌کند. اگر کاربر عددی وارد کند، کد داخل بلوک try اجرا می‌شود و سپس کد داخل بلوک else اجرا می‌شود. این کد عدد وارد شده توسط کاربر را چاپ می‌کند.

برای استفاده از بلوک else در try-except، لازم است مراحل زیر را دنبال کنید:

  1. بلوک try-except را همانطور که معمولاً انجام می‌دهید بنویسید.
  2. یک بلوک else را بعد از بلوک try قرار دهید.
  3. کدی را که می‌خواهید در صورتی که هیچ خطا رخ ندهد اجرا شود، در بلوک else قرار دهید.

چند نکته مهم در مورد استفاده از else در try-except:

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

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

یک نمونه واقعی مدیریت خطا در پایتون

مدیریت خطا در پایتون

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

می توانید از دستور try – except برای انجام این کار استفاده کنید:

import mysql.connector
def connect_to_database():
    try:
        connection = mysql.connector.connect(
            host="localhost",
            user="root",
            password="password",
            database="my_database"
        )
        return connection
    except mysql.connector.Error as e:
        raise ConnectionError(e.msg)
try:
    connection = connect_to_database()
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM users")
    for row in cursor:
        print(row)
finally:
    connection.close()

در این مثال، از دستور try – except برای مدیریت خطاهای اتصال به پایگاه داده استفاده کردیم. اگر پایگاه داده در دسترس نباشد، استثنای ConnectionError رخ می دهد. کد در بلوک except اجرا می شود و پیام خطا را چاپ می کند. در این مثال، از دستور finally نیز برای بستن اتصال به پایگاه داده استفاده می کنیم. این کار به جلوگیری از نشت حافظه کمک می کند.

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

چند نکته برای مدیریت خطا در پایتون:

  • داخل دستور try – except همه خطاهای احتمالی را قرار دهید.
  • پیام خطا را واضح و مختصر بنویسید.
  • در صورت امکان، سعی کنید علت خطا را تشخیص دهید و آن را برطرف کنید.
  • در صورت عدم امکان برطرف کردن علت خطا، برنامه را به روشی ایمن متوقف کنید.

با رعایت این نکات، می توانید برنامه های خود را ایمن تر و قابل اعتمادتر کنید.

چگونه در پایتون حرفه‌ای‌تر شویم؟

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

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

نظرات
ثبت نظر جدید

نظری برای این مقاله ثبت نشده است