در برنامهنویسی، خطا بخش اجتنابناپذیر کار ماست. اما هنر یک توسعهدهنده حرفهای اینه که بتونه بهدرستی باگها رو شناسایی و رفع کنه و قبل از تحویل پروژه مطمئن باشه کدها درست کار میکنن. در این مقاله به سه ابزار و تکنیک مهم در دیباگ و تست کدهای پایتون میپردازیم:
pdb مخفف Python Debugger هست و ابزار داخلی پایتونه برای دیباگ کردن کدها بهصورت خط به خط.
مثال ساده:
import pdbdef divide(a, b):pdb.set_trace()result = a / breturn resultprint(divide(10, 0))
در اینجا برنامه با اجرای pdb.set_trace() متوقف میشه و میتونید دستورات دیباگر مثل n (رفتن به خط بعدی)، c (ادامه اجرا) یا p variable (چاپ مقدار متغیر) رو اجرا کنید.
دستورات کاربردی در pdb:
n: اجرای خط بعدیc: ادامه اجرا تا breakpoint بعدیq: خروج از pdbp: چاپ مقدار متغیرl: لیست کردن خطوط کدs: ورود به تابعنکته: pdb.set_trace() رو فقط برای دیباگ استفاده کنید و بعد از رفع باگها از کد حذفش کنید.
نوشتن تست یونیت باعث میشه قبل از اجرای واقعی برنامه، مطمئن بشیم توابع و کلاسها درست کار میکنن.
unittest (کتابخانه پیشفرض پایتون)
import unittestdef add(a, b):return a + bclass TestMath(unittest.TestCase):def test_add(self):self.assertEqual(add(2, 3), 5)self.assertEqual(add(-1, 1), 0)if __name__ == '__main__':unittest.main()
اجرای تست:
python test_file.py
def multiply(a, b):return a * bdef test_multiply():assert multiply(3, 4) == 12assert multiply(-1, 5) == -5
اجرای تست:
pytest test_file.py
چرا pytest بهتره؟
چاپ ساده با print() توی پروژههای بزرگ جواب نمیده! با ماژول logging میتونید لاگهایی با سطحبندی و تنظیمات مختلف ایجاد کنید.
import logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def divide(a, b):try:result = a / blogging.info(f"Division successful: {result}")return resultexcept ZeroDivisionError as e:logging.error("Cannot divide by zero!")return Nonedivide(10, 2)divide(10, 0)
خروجی لاگ:
2025-03-23 12:00:00 - INFO - Division successful: 5.02025-03-23 12:00:00 - ERROR - Cannot divide by zero!
سطوح مختلف لاگ:
DEBUG: برای جزئیات بیشتر دیباگINFO: برای اطلاعات کلی روند اجراWARNING: برای هشدارهاERROR: برای خطاهاCRITICAL: برای خطاهای بحرانینکته: میتونید لاگها رو به فایل هم ارسال کنید:
logging.basicConfig(filename='app.log', level=logging.INFO)
🔹 با pdb میتونید کد رو خط به خط بررسی کنید.
🔹 با unittest و pytest میتونید مطمئن بشید که توابع، همونطوری که باید کار میکنن.
🔹 با logging لاگهای حرفهای برای بررسی مشکلات واقعی در محیط production مینویسید.
تجربه شما چیه؟ از کدوم ابزار برای دیباگ یا تست بیشتر استفاده میکنید؟