خانه / آموزش‌ها / آموزش دیباگینگ و رفع خطا در پایتون

آموزش دیباگینگ و رفع خطا در پایتون

🐍 HomeOfPython
|
📅 1404/10/22

سطح مقدماتی (Beginner Level)

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

۱. خواندن صحیح Traceback

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

Python
Python

۲. دیباگینگ با Print (Print Debugging)

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

Python
Python

سطح پیشرفته (Professional Level)

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

۱. استفاده از breakpoint() و ماژول pdb

پایتون دارای یک دیباگر داخلی به نام pdb (Python Debugger) است. از نسخه ۳.۷ به بعد، تابع داخلی breakpoint() کار را بسیار ساده کرده است. وقتی مفسر به این خط می‌رسد، اجرای برنامه متوقف شده و شما وارد یک محیط تعاملی می‌شوید تا متغیرها را بررسی کنید.

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

python
# Example 1: Using breakpoint() (Static Demo)
def process_data(data):
    result = []
    for item in data:
        # Code execution pauses here!
        # You can type 'item' inside the debugger to see its value
        breakpoint() 
        result.append(item * 2)
    return result
Python

۲. دستورات کلیدی pdb

وقتی وارد محیط دیباگ می‌شوید، باید با دستورات آن کار کنید.

  • n (next): رفتن به خط بعدی.
  • c (continue): ادامه اجرای برنامه تا breakpoint بعدی.
  • l (list): نمایش کدهای اطراف خط فعلی.
  • p variable: چاپ مقدار متغیر.
  • q (quit): خروج از دیباگر.
python
# Example 1: A script prepared for debugging
import sys

def logic(a, b):
    # Imagine we want to debug this step
    val = a + b
    return val

# Standard pattern for debuggable scripts
if __name__ == "__main__":
    # Usually you run this in terminal: python script.py
    print(logic(10, 20))
Python

۳. تفاوت logging و print در دیباگ

حرفه‌ای‌ها به جای print از ماژول logging استفاده می‌کنند. print همیشه خروجی می‌دهد، اما logging را می‌توان خاموش کرد یا سطح آن را تغییر داد (مثلاً فقط ارورهای بحرانی را نشان دهد).

Python
python
# Example 2: Logging in a real function (Static)
import logging

def connect_db(url):
    logging.info(f"Attempting to connect to {url}")
    try:
        # connection logic
        pass
    except Exception as e:
        logging.error(f"Connection failed: {e}", exc_info=True)