Kahibaro
Discord Login Register

فصل ۱۱: خطاها و اشکال‌زدایی

چرا این فصل مهم است؟

هیچ برنامه‌نویسی (حتی حرفه‌ای‌ها) بدون خطا کد نمی‌نویسد. تفاوت یک مبتدی و یک برنامه‌نویس خوب در این نیست که «خطا نکند»، بلکه در این است که بلد باشد خطا را پیدا و برطرف کند. این فصل به شما کمک می‌کند:

در این فصل تمرکز روی ایده‌ها و مهارت‌های عمومی است؛ جزئیات فنی هر زیرموضوع در زیربخش‌های خودش (انواع خطاها، try/except و …) باز می‌شود.

خطا (Error) در برنامه یعنی چه؟

وقتی برنامهٔ شما نتواند کاری را که باید انجام دهد ادامه دهد و اجرا متوقف شود، با یک «خطا» روبه‌رو شده‌اید. معمولاً پایتون:

هدف ما در این فصل این است که:

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

به مجموع این کارها می‌گوییم اشکال‌زدایی (Debugging).

تفاوت خطا و باگ

در گفتگوهای روزمره، «خطا» و «باگ» گاهی به یک معنا استفاده می‌شوند، اما بهتر است یک تفکیک ساده داشته باشیم:

مثال باگ بدون پیام خطا:

price = 100
discount = 10   # درصد
final_price = price + price * discount / 100  # اینجا در واقع داریم تخفیف را اضافه می‌کنیم!
print(final_price)

این کد از نظر پایتون کاملاً درست است و خطایی نمی‌دهد، اما منطقش اشتباه است؛ باید از - استفاده می‌کردیم، نه +. این یک باگ منطقی است.

خطاها از کجا می‌آیند؟

چند منبع رایج:

در فصل‌های بعدی، بسیاری از این منابع خطا را در زمینه‌های خاص (فایل‌ها، وب، علم داده و …) خواهید دید؛ این فصل روی اصول کلی تمرکز دارد.

پیام‌های خطا در پایتون چه شکلی‌اند؟

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

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    print(1 / 0)
ZeroDivisionError: division by zero

چیزهایی که باید یاد بگیرید از درون این متن پیدا کنید:

در زیربخش «خواندن پیام‌های خطا» این ساختار را دقیق‌تر می‌بینید. در این فصل فقط به این نکته توجه کنید که:

پیام خطاها را نادیده نگیرید؛ آن‌ها مهم‌ترین راهنمای شما برای اشکال‌زدایی هستند.

روند کلی اشکال‌زدایی

برای برطرف کردن یک خطا یا باگ، معمولاً یک روند تکراری را طی می‌کنیم:

  1. مشکل را مشاهده کنید
    • پیام خطا را بخوانید
    • یا خروجی اشتباه/رفتار عجیب را ببینید
  2. محل تقریبی مشکل را پیدا کنید
    • از شمارهٔ خط در پیام خطا استفاده کنید
    • یا قطعه کدی که نتیجهٔ اشتباه می‌دهد را محدود کنید
  3. دلیل احتمالی را حدس بزنید
    • نوع خطا را ببینید (مثلاً TypeError، NameError و …)
    • ورودی‌ها، نوع داده‌ها و منطق خودتان را بررسی کنید
  4. کد را کمی تغییر دهید
    • پرینت بگذارید (print) تا بفهمید متغیرها چه مقداری دارند
    • بخشی از کد را موقتاً کامنت کنید
    • یا از try/except استفاده کنید تا اطلاعات بیشتری بگیرید
  5. دوباره اجرا کنید و نتیجه را ببینید
    • اگر درست شد، تغییر را تثبیت کنید
    • اگر هنوز مشکل هست، حدس‌تان را اصلاح کنید و دوباره تلاش کنید

این یک فرآیند مرحله‌به‌مرحله است، نه یک کار یک‌باره.

فرق «مدیریت خطا» و «رفع خطا»

دو کار متفاوت ولی مرتبط:

در این فصل، هر دو را خواهید دید؛ اما فصل «try و except» به طور خاص روی مدیریت خطا تمرکز می‌کند.

اشکال‌زدایی با چاپ کردن (`print`)

یکی از ساده‌ترین و مؤثرترین روش‌های اشکال‌زدایی برای مبتدی‌ها استفاده از print است. ایدهٔ ساده است:

مثلاً اگر حلقه‌تان درست کار نمی‌کند:

total = 0
for i in range(5):
    print("قبل از جمع، i =", i, "total =", total)
    total = total + i
    print("بعد از جمع، i =", i, "total =", total)
print("نتیجهٔ نهایی:", total)

این نوع پرینت‌ها شاید در نسخهٔ نهایی برنامه نمانند، اما در طول اشکال‌زدایی ابزار اصلی شما هستند.

عادت‌های خوب برای کاهش خطا

اشکال‌زدایی راحت‌تر می‌شود اگر از ابتدا چند عادت را رعایت کنید:

برخورد درست با پیام‌های خطا

وقتی اولین‌بار با پیام‌های خطا روبه‌رو می‌شوید، ممکن است طولانی و ترسناک به‌نظر برسند. اما:

در زیربخش «خواندن پیام‌های خطا» شکل‌های مختلفی از آن را می‌بینید.

نقش IDE و ابزارها در اشکال‌زدایی

در فصل‌های مربوط به IDE و ابزارها اشاره شده که محیطی مثل VS Code امکاناتی مثل:

را دارد. در زمینهٔ اشکال‌زدایی:

اما حتی در ساده‌ترین حالت (ترمینال + ویرایشگر معمولی)، اصولی که در این فصل می‌آموزید کاملاً کاربرد دارند.

خلاصهٔ فصل

در این فصل با چند ایدهٔ اساسی آشنا شدید:

در ادامه، ابتدا به طور مشخص به انواع خطاها در پایتون می‌پردازیم.

Views: 8

Comments

Please login to add a comment.

Don't have an account? Register now!