برنامه نویسی یک هنر است و اشکالات بخشی اجتناب ناپذیر از خلاقیت هستند process. هر توسعه‌دهنده‌ای با خطاهایی در کد خود مواجه می‌شود – در واقع هیچ استثنایی برای آن وجود ندارد.

به همین دلیل، درک چگونگی اشکال زدایی موثر یک مهارت بسیار مهم است که می تواند در وقت و ناامیدی شما صرفه جویی کند.

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

فهرست مطالب

  1. پیام های خطای رایج کد
  • SyntaxError: نحو نامعتبر است
  • IndentationError: تورفتگی غیرمنتظره
  • NameError: نام “متغیر” تعریف نشده است
  • AttributeError: شیء ‘module’ هیچ ویژگی ‘attribute_name’ ندارد
  • FileNotFoundError: [Errno 2] چنین فایل یا فهرستی وجود ندارد: “نام فایل”
  • IndexError: فهرست فهرست خارج از محدوده
  • ImportError: هیچ ماژولی با نام “module_name” وجود ندارد
  • TypeError
  • ValueError

2. روش اشکال زدایی کد پایتون

3. اشکال زدایی بنیادی تکنیک

  • چاپ بیانیه ها
  • ورود به سیستم
  • رسیدگی به استثنا
  • ادعاها

4. تکنیک های پیشرفته اشکال زدایی

  • تست واحد
  • اشکال زدای تعاملی (PDB)
  • اشکال زدایی از راه دور

5. اشکال زدایی عملکرد

  • لینترها و آنالایزرهای کد
  • پروفایل کردن

6. ویژگی های IDE برای اشکال زدایی

7. چند نکته اضافی برای اشکال زدایی کارآمد

8. روش جستجوی راه حل برای اشکالات و خطاها

  • استراتژی های جستجوی موثر
  • استفاده از منابع وب

پیام های خطای رایج کد

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

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

1. SyntaxError: نحو نامعتبر است

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

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

2. IndentationError: تورفتگی غیرمنتظره

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

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

3. NameError: نام “متغیر” تعریف نشده است

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

مطمئن شوید که اشتباهات تایپی در نام متغیرها یا توابع را بررسی کرده و مطمئن شوید که آنها قبل از استفاده تعریف شده اند.

4. AttributeError: شیء ‘module’ هیچ ویژگی ‘attribute_name’ ندارد

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

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

5. FileNotFoundError: [Errno 2] چنین فایل یا فهرستی وجود ندارد: “نام فایل”

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

شما باید مسیر فایل را بررسی کنید و مطمئن شوید که فایل در محل مشخص شده وجود دارد.

6. IndexError: فهرست فهرست خارج از محدوده

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

برای رفع آن، مطمئن شوید که شاخص مورد استفاده در محدوده معتبر دنباله قرار دارد.

7. ImportError: هیچ ماژولی با نام “module_name” وجود ندارد

اگر بخواهید این خطا را دریافت خواهید کرد import ماژولی که نصب یا در دسترس نیست.

برای جلوگیری از این امر، ماژول مورد نیاز را با استفاده از یک مدیریت بسته (pip) یا نام ماژول را برای اشتباهات املایی بررسی کنید.

8. TypeError:

این یک استثنا رایج در پایتون است که زمانی اتفاق می‌افتد که یک عملیات یا تابع به یک شی از نوع نامناسب اعمال شود. در اینجا چند نوع متداول وجود دارد TypeError:

  1. TypeError: unsupported operand type(s) for +: 'type1' and 'type2': این خطا هنگام تلاش برای انجام یک عملیات رخ می دهد روی دو شی با انواع ناسازگار. به عنوان مثال، تلاش برای اضافه کردن یک رشته و یک عدد صحیح یا ضرب یک لیست در یک رشته.
  2. TypeError: function_name() takes X positional arguments but Y were given: این خطا هنگام فراخوانی یک تابع با تعداد آرگومان نادرست رخ می دهد. این نشان می دهد که تابع تعداد خاصی از آرگومان ها را انتظار دارد، اما تعداد متفاوتی ارائه شده است.
  3. TypeError: 'int' object is not callable: این خطا زمانی رخ می دهد که شما سعی می کنید یک شی را طوری فراخوانی کنید که انگار یک تابع است، اما قابل فراخوانی نیست. به عنوان مثال، تلاش برای فراخوانی یک عدد صحیح.

9. ValueError:

این نوع خطا زمانی رخ می دهد که تابعی آرگومان از نوع صحیح اما با مقدار نامناسب را دریافت کند.

  1. ValueError: invalid literal for int() with base X: 'non-numeric': این زمانی اتفاق می افتد که سعی می کنید یک رشته را با استفاده از یک عدد صحیح تبدیل کنید int()، اما رشته نمایش معتبری از یک عدد صحیح در پایه مشخص شده (X) نیست. به عنوان مثال، تلاش برای تبدیل یک رشته غیر عددی یا یک رشته با فرمت نامعتبر (مثلاً حاوی حروف) به یک عدد صحیح.
  2. ValueError: could not convert string to float: 'non-numeric': این زمانی اتفاق می‌افتد که سعی کنید یک رشته را با استفاده از یک عدد ممیز شناور تبدیل کنید float()، اما رشته نمایش معتبری از یک عدد نیست. مشابه مورد اول، اغلب شامل کاراکترهای غیر عددی یا قالب نادرست است.
  3. ValueError: invalid literal for int() with base 10: 'non-numeric': مشابه مورد اول، این خطا هنگام تلاش برای تبدیل رشته به عدد صحیح با استفاده از int()، اما رشته یک نمایش عددی معتبر در پایه 10 نیست. این یک شکل کلی تر از نوع اول است که در آن پایه به صراحت روی 10 تنظیم شده است.
  4. ValueError: unhashable type: 'mutable_type': این خطا هنگام تلاش برای استفاده از یک نوع قابل تغییر (مثلاً لیست، فرهنگ لغت) به عنوان کلید در فرهنگ لغت یا به عنوان عنصری در مجموعه رخ می دهد. دیکشنری ها و مجموعه ها نیاز دارند که کلیدها و عناصر از نوع هش پذیر (غیرقابل تغییر) باشند. برای حل این مشکل، نوع قابل تغییر را به یک تغییرناپذیر تبدیل کنید یا ساختار داده متفاوتی را در نظر بگیرید که از عناصر قابل تغییر پشتیبانی می کند.

درک این خطاهای رایج پایه ای برای اشکال زدایی موثر فراهم می کند.

روش اشکال زدایی کد پایتون

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

تکنیک های اساسی رفع اشکال:

هنگامی که در حال نوشتن کد هستید، به خصوص در برنامه های پیچیده، درک روش اجرای کد و مقادیر متغیرها در نقاط مختلف برنامه ضروری است. دستورات چاپ به شما امکان می دهد پیام هایی را در کد خود وارد کنید که در کد چاپ می شوند console یا terminal زمانی که برنامه اجرا می شود

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

در اینجا یک مثال است:

def my_function(x, y):
    print("Entering my_function")
    print(f'x: {x}, y: {y}')
    result = x + y
    print(f'Result: {result}')
    print("Exiting my_function")
    return result

در حالی که print عبارات اغلب سریع ترین و ساده ترین راه برای دریافت اجمالی از جریان اجرای برنامه هستند، به ویژه در طول توسعه اولیه. مدیریت آنها می تواند دست و پا گیر باشد و ممکن است برای کد تولید مناسب نباشند و بنابراین Logging ارائه می شود که راهی ساختاریافته برای ثبت اطلاعات

ورود به سیستم

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

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

سطوح ثبت نام:

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

در اینجا یک نمونه از ورود به سیستم آورده شده است:

import logging

logging.basicConfig(level=logging.Info)

def example_function(x, y):
    logging.debug(f"Input values: x={x}, y={y}")
    result = x + y
    logging.debug(f"Result: {result}")
    return result

result = example_function(3, 7)

# Logging an error message
if result > 10:
    logging.error("Result exceeds the expected maximum.")
  • level=logging.INFO را تنظیم می کند root سطح چوبگیر به INFO. این بدان معنی است که پیام ها را با شدت ثبت کنید INFO و بالاتر ضبط می شود، در حالی که پیام هایی با شدت کمتر (مانند DEBUG) نادیده گرفته خواهد شد. گزارش ها را در فایلی به نام می نویسد example.log
  • درون example_function، logging.debug() برای ثبت اطلاعات در مورد مقادیر ورودی و نتیجه استفاده می شود. این پیام‌ها تنها در صورتی نمایش داده می‌شوند که سطح ثبت روی تنظیم شده باشد DEBUG یا پایین تر
  • با استفاده از یک پیام خطا ثبت می شود logging.error() اگر نتیجه بیش از حداکثر مورد انتظار باشد (در این مورد، 10).
  • ورود به سیستم را می توان برای نوشتن پیام به هر دو پیکربندی کرد console و فایلی به نام example.log. این format پارامتر را می توان برای سفارشی کردن ظاهر پیام های گزارش، از جمله مهر زمانی، سطح گزارش، و پیام گزارش واقعی استفاده کرد.
# Optional
logging.basicConfig(
    filename="example.log",
    format="%(asctime)s - %(levelname)s - %(message)s",
    level=logging.DEBUG
)

# this format includes the timestamp, module name, and log level in each log message.

توجه داشته باشید : در برنامه های بزرگتر، معمول است که به جای استفاده از Logger استفاده شود root لاگر مستقیما این رویکرد اجازه می دهد تا کنترل دقیق تری بر ورود به سیستم در بخش های مختلف برنامه انجام شود. در اینجا می توانید اطلاعات بیشتری در مورد لاگ و لاگرها بخوانید.

برای کسب اطلاعات بیشتر در مورد لاگ و لاگرها در پایتون، این وبلاگ را بررسی کنید: https://www.samyakinfo.tech/blog/logging-in-python

رسیدگی به استثنا

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

این try-except بیانیه راهی برای مدیریت استثناها در پایتون است. در اینجا یک ساختار اساسی وجود دارد:

try:
    result = x / y
except ExceptionType as e:
    print(f"An exception of type {type(e).__name__} occurred: {e}")
    # Additional handling logic, if needed
  • try مسدود کردن: حاوی کدی است که ممکن است استثنایی ایجاد کند.
  • except مسدود کردن: حاوی کدی است که در صورت وجود استثنایی از نوع مشخص شده در کد اجرا می شود try مسدود کردن.
  • نوع استثنا: نوع استثنا را برای گرفتن مشخص می کند. می توانید استثناهای خاص یا کلی تر را بگیرید Exception تایپ کنید تا هر استثنایی را بگیرید.
  • as e:: شی استثنا را به متغیر اختصاص می دهد e، به شما امکان می دهد به اطلاعات مربوط به استثنا دسترسی داشته باشید.
def safe_divide(x, y):
    try:
        result = x / y
        print(f"Result: {result}")
    except ZeroDivisionError as e:
        print(f"Error: {type(e).__name__} - {e}")
        # Handle the division by zero case
    except Exception as e:
        print(f"An unexpected error occurred: {type(e).__name__} - {e}")
        # Handle other types of exceptions
    finally:
        print("This block always executes, whether an exception occurred or not.")

# Eg.
safe_divide(10, 2)
safe_divide(5, 0)

در این مثال، safe_divide تابع تلاش می کند تا عملیات تقسیم را انجام دهد. اگر یک ZeroDivisionError رخ می دهد (تقسیم بر صفر)، در اولی قرار می گیرد except مسدود کردن. اگر هر نوع استثنایی دیگری رخ دهد، در حالت دوم قرار می گیرد except مسدود کردن. این finally بلوک همیشه اجرا می شود، صرف نظر از اینکه آیا استثنا رخ داده است.

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

ادعاها

یک ادعا عبارتی است که شما به کد خود اضافه می کنید تا بررسی کنید که آیا یک شرط خاص درست است یا خیر. اگر شرط نادرست باشد، نشان دهنده یک باگ یا وضعیت غیرمنتظره در برنامه شما است.

در پایتون، شما از assert کلمه کلیدی برای ایجاد یک ادعا نحو عبارت است از:

assert condition, "Optional error message"

# Example of an assertion with an optional error message
x = 10
y = 0
assert y != 0, "Divisor (y) should not be zero"

# Handling AssertionError
try:
    assert x > 0, "x should be greater than zero"
except AssertionError as e:
    print(f"Assertion failed: {e}")

در این مثال، assert y != 0 بررسی می کند که آیا مقسوم علیه (y) صفر نیست. اگر صفر باشد، ادعا با شکست مواجه می شود و برنامه یک عدد را بالا می برد AssertionError با پیغام خطای مشخص شده

ملاحظات هنگام استفاده از ادعاها:

  • ادعاها معمولاً در طول توسعه و اشکال زدایی استفاده می شوند. در یک محیط تولید، ممکن است به دلایل عملکرد، ادعاها را غیرفعال کنید. برای غیرفعال کردن آن، از -O (به عنوان مثال. python -O script.py ) command-line گزینه یا PYTHONOPTIMIZE متغیر محیطی. این -O(بهینه سازی) پرچم اظهارات ادعا را خاموش می کند.
  • ادعاها برای اعتبار سنجی ورودی از سوی کاربران یا سیستم های خارجی نیست. آنها بیشتر برای گرفتن خطاهای منطقی در کد شما هستند.
  • ادعاها باید شرایط ساده ای باشند که بررسی و درک آن آسان باشد. از عبارات پیچیده یا عوارض جانبی اجتناب کنید.

تکنیک های پیشرفته رفع اشکال:

تست واحد

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

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

روش استفاده unittest

unittest چارچوب تست داخلی در پایتون است که از JUnit جاوا الهام گرفته شده است. این یک مکانیسم کشف آزمایشی و روش‌های ادعایی مختلف برای تأیید رفتار مورد انتظار ارائه می‌کند

بیایید با یک مثال ساده شروع کنیم. فرض کنید تابعی داریم که دو عدد را جمع می کند:

# my_module.py

def add_numbers(a, b):
    return a + b

اکنون می توانیم یک فایل تست مربوطه ایجاد کنیم:

# test_my_module.py
import unittest
from my_module import add_numbers

class TestAddNumbers(unittest.TestCase):
    def test_add_numbers(self):
        result = add_numbers(2, 3)
        self.assertEqual(result, 5)

if __name__ == '__main__':
    unittest.main()

برای اجرای تست ها دستور زیر را در قسمت اجرا کنید terminal:

python -m unittest test_my_module.py

روش استفاده pytest

pytest یک چارچوب تست شخص ثالث است که نحو مختصرتر و ویژگی های اضافی مانند وسایل قدرتمند و پشتیبانی گسترده از افزونه را ارائه می دهد.

با استفاده از مثال قبلی، الف pytest تست ممکن است شبیه به این باشد:

# test_my_module.py

from my_module import add_numbers

def test_add_numbers():
    result = add_numbers(2, 3)
    assert result == 5

برای اجرای تست ها، به سادگی اجرا کنید:

pytest test_my_module.py

روش استفاده از دیباگر تعاملی (PDB)

پایتون با یک دیباگر داخلی به نام PDB (Python Debugger) عرضه می شود. این به شما امکان می دهد اجرای کد پایتون خود را متوقف کنید، متغیرها را بررسی کنید و برای یافتن و رفع مشکلات، خط به خط کد خود را طی کنید.

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

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

import pdb

def example_function(x, y):
    pdb.set_trace()
    result = x + y
    return result

تعیین نقاط شکست

برای شروع اشکال زدایی در یک نقطه خاص از کد خود، باید آن را وارد کنید pdb.set_trace() بیانیه. این خط به عنوان نقطه شکست عمل می کند و نشان می دهد که اشکال زدا باید اجرای برنامه را در کجا متوقف کند.

def some_function():
    pdb.set_trace()  # This line sets a breakpoint
    print("Hello, World!")

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

راه اندازی دیباگر:

دو راه برای شروع دیباگر وجود دارد:

آ. با استفاده از break فرمان:

در پایتون 3.7 و نسخه های بعدی، pdb را معرفی کرد pdb.breakpoint() به عنوان یک روش راحت تر و استاندارد برای تعیین نقطه انفصال و رسیدگی به برخی مشکلات احتمالی با آن عمل می کند pdb.set_trace() روش.

شما می توانید نقاط شکست را مستقیما در کد خود با استفاده از break فرمان مثلا:

import pdb

def some_function():
    # Setting a breakpoint at line 4
    pdb.breakpoint()
    print("Hello, World!")

some_function()

ب اجرای اسکریپت با -m pdb گزینه:

یا می توانید اسکریپت پایتون خود را با -m pdb گزینه ای که به طور خودکار دیباگر را شروع می کند. مثلا:

python -m pdb your_script.py

وارد شدن به حالت Debugger:

هنگامی که کد شما با نقطه شکست مواجه می شود (یکی از این موارد را با استفاده از pdb.set_trace() یا pdb.breakpoint()، وارد حالت اشکال زدایی تعاملی می شود. این توسط نشان داده شده است (Pdb) سریع.

اسکرین شات-2024-01-18-212824-1
یک عکس فوری از حالت اشکال زدا تعاملی در terminal

دستورات پایه:

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

برخی از دستورات رایج در دیباگر pdb عبارتند از:

  • n (بعدی): اجرا را تا رسیدن به خط بعدی تابع فعلی ادامه دهید. اگر خط فعلی حاوی یک فراخوانی تابع باشد، وارد تابع فراخوانی شده نخواهد شد.
  • c (ادامه): اجرا را تا رسیدن به نقطه شکست بعدی ادامه دهید.
  • s (مرحله): خط فعلی کد را اجرا کنید و در اولین موقعیت ممکن متوقف شوید (چه در تابعی که فراخوانی می شود یا در خط بعدی تابع فعلی).
  • q (خروج): از دیباگر خارج شده و برنامه را خاتمه دهید.
  • break (یا b): break [file:]line_number یا break [function_name] نقطه شکست را در شماره خط یا تابع مشخص شده تنظیم می کند. زمانی که اجرای برنامه به نقطه انفصال رسید، مکث می‌کند و به شما امکان می‌دهد متغیرها را بررسی کرده و از کد عبور کنید.

با قرار دادن نقاط شکست به صورت استراتژیک و استفاده از این دستورات، می توانید به طور موثر کد پایتون خود را اشکال زدایی کرده و منبع مسائل را به صورت سیستماتیک شناسایی کنید.


فرمان

عملکرد

لیست (یا l)


فهرست یا فهرست [first[, last]]: نمایش کد منبع در اطراف خط فعلی. به صورت اختیاری، می توانید محدوده ای از خطوط را برای نمایش مشخص کنید.

print (یا p)

print اصطلاح: ارزیابی و print مقدار عبارت مشخص شده این برای بازرسی متغیرها مفید است.

شکستن (یا ب)


[file:]خط_شماره یا شکست [function_name]: نقطه شکست را در شماره خط یا تابع مشخص شده تنظیم می کند. زمانی که اجرای برنامه به نقطه انفصال رسید، مکث می‌کند و به شما امکان می‌دهد متغیرها را بررسی کرده و از کد عبور کنید.

کمک

فهرستی از دستورات را نمایش می‌دهد یا اطلاعاتی درباره یک دستور یا موضوع خاص ارائه می‌کند (مثلاً نقاط شکست راهنما)

جایی که

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

برنامه های افزودنی اشکال زدا

استفاده از ابزارهای اشکال زدایی و برنامه های افزودنی شخص ثالث را در نظر بگیرید pdbpp، pudb و ipdb، که عملکرد دیباگر PDB داخلی را افزایش می دهد.

pdbpp ویژگی های اضافی مانند برجسته سازی نحو، تکمیل برگه و قابلیت های ناوبری بهتر را ارائه می دهد.

ipdb یک دیباگر مبتنی بر IPython است که ویژگی های قدرتمند IPython را در تجربه اشکال زدایی ادغام می کند. این یک رابط تعاملی و کاربر پسند برای اشکال زدایی کد پایتون ارائه می دهد. این برنامه از دستورات جادویی IPython پشتیبانی می کند و انجام وظایف اشکال زدایی پیچیده را آسان تر می کند.

pudb تمام صفحه است، consoleاشکال زدایی بصری مبتنی بر که برجسته سازی نحو و تجربه اشکال زدایی تعاملی و جذاب از نظر بصری را ارائه می دهد. این شامل یک رابط بصری با یک مرورگر کد است که حرکت در کد شما را آسان می کند.

برای استفاده از هر یک از آنها، جایگزین کنید pdb با دیباگر مربوطه ای که می خواهید استفاده کنید. برای مثال import pdb; pdb.set_trace() با import pdbpp; pdbpp.set_trace() در کد شما

اشکال زدایی از راه دور

اشکال زدایی از راه دور به این اشاره دارد process کد اشکال زدایی که در حال اجرا است روی یک سیستم یا سرور جدا از محیط توسعه این معمولاً در هنگام استقرار برنامه استفاده می شود روی یک سرور راه دور، در فضای ابری یا روی یک دستگاه متفاوت

شما محیط توسعه مجتمع (IDE) محلی خود را به محیط راه دوری که کد در آن اجرا می شود متصل می کنید.

شما می توانید این کار را به دو صورت انجام دهید:

  • IDE با پشتیبانی از اشکال زدایی از راه دور: محیط های توسعه یکپارچه محبوب (IDE) مانند PyCharm، Visual Studio Code، و سایرین پشتیبانی داخلی برای اشکال زدایی از راه دور ارائه می دهند.
  • کتابخانه pdf یا pydevd: پایتون داخلی pdb ماژول را می توان برای اشکال زدایی اولیه استفاده کرد. به طور متناوب، می توانید استفاده کنید pydevd، یک دیباگر قدرتمند از راه دور.

نقاط شکست از راه دور، گام برداشتن در کد، بازرسی متغیر، و سایر ویژگی های اشکال زدایی، مشابه اشکال زدایی محلی، استفاده می شود.

ویژگی های IDE برای اشکال زدایی

یکپارچه ترین محیط های توسعه (IDE) برای پایتون، مانند PyCharm، Visual Studio Code، و Jupyter نوت بوک ها دارای ویژگی های اشکال زدایی قدرتمند هستند. اینها شامل نقاط شکست بصری، بازرسی متغیر و اجرای گام به گام است. از این ویژگی ها برای ساده سازی اشکال زدایی خود استفاده کنید process.

نقاط شکست بصری:

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

  • PyCharm: به سادگی کلیک کنید روی حاشیه سمت چپ در کنار شماره خطی که می خواهید نقطه شکست را در آن تنظیم کنید.
  • Visual Studio Code: کلیک روی حاشیه سمت چپ، یا از میانبر استفاده کنید F9.
  • بیکار: می توانید خط را اضافه کنید import pdb; pdb.set_trace() در محل مورد نظر
تصویر-101
یک عکس فوری از نقطه شکست (نقطه قرمز) در PyCharm

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

گام برداشتن از طریق کد:

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

  • مرحله به (F7): به خط بعدی کد منتقل می شود و در صورت وجود، فراخوانی های تابع را وارد می کند.
  • مرحله به پایان (F8): خط فعلی کد را اجرا می کند و در خط بعدی متوقف می شود و از فراخوانی های تابع صرف نظر می کند.
  • پا به بیرون (Shift + F8): اجرای تابع فعلی را کامل می کند و در تابع فراخوان متوقف می شود.
تصویر-119
گام در میان گزینه های کد

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

Jupyter نوت بوک ها با کمک دستورات جادویی مانند %debug که به شما امکان می دهد به صورت تعاملی یک سلول را اشکال زدایی کنید.

کاوش پشته تماس:

IDE ها معمولاً یک پشته تماس ارائه می دهند که سلسله مراتب فراخوانی های تابع را که به نقطه فعلی کد منتهی می شود نشان می دهد. این برای درک جریان اجرای برنامه ارزشمند است و می تواند به ویژه در هنگام برخورد با برنامه های کاربردی پیچیده مفید باشد.

برای مثال PyCharm پشته تماس را در پنجره ابزار اشکال زدایی نمایش می دهد.

بازرسی متغیر:

بررسی متغیرها برای درک چگونگی تغییر داده ها در طول اجرای برنامه بسیار مهم است. IDE ها یک پانل متغیرها را ارائه می دهند که در آن می توانید وضعیت فعلی متغیرها را مشاهده کنید و شناسایی باگ ها را آسان تر می کند. به سادگی ماوس را روی یک متغیر نگه دارید یا برگه متغیرها را بررسی کنید تا مقدار فعلی آن را ببینید.

  • PyCharm: از یک صفحه اختصاصی “متغیرها” در هنگام اشکال زدایی استفاده می کند.
  • Visual Studio Code: بازرسی متغیر را در پانل های “Watch” و “Variables” ارائه می دهد.
  • بیکار: به شما امکان می‌دهد نام متغیرها را در بخش تعاملی تایپ کنید console در حین اشکال زدایی

بررسی متغیرها برای درک چگونگی تغییر داده ها در طول اجرای برنامه بسیار مهم است.

نقاط شکست شرطی:

علاوه بر نقاط شکست استاندارد، برخی از IDE ها به شما امکان می دهند نقاط شکست را با شرایط تنظیم کنید. این بدان معناست که دیباگر تنها در صورتی متوقف می شود که یک شرط مشخص شده برآورده شود. این می تواند زمانی مفید باشد که می خواهید سناریو یا شرایط خاصی را در کد خود بررسی کنید.

  • PyCharm: کلیک راست روی یک نقطه شکست و شرایط را تنظیم کنید.
  • Visual Studio Code: کلیک راست روی یک نقطه انفصال، “Edit Breakpoint” را انتخاب کنید و یک شرط را تعریف کنید.
  • بیکار: استفاده کنید pdb کتابخانه برای تنظیم نقاط شکست شرطی در کد شما.
تعداد ضربه--1-
یک عکس فوری که نشان می دهد process تنظیم نقطه شکست شرطی در کد پایتون در PyCharm

عبارات تماشا:

عبارات Watch به شما این امکان را می دهد که متغیرها یا عبارات خاصی را به طور مداوم در حین اجرای برنامه خود نظارت کنید. این ویژگی زمانی مفید است که می‌خواهید مراقب باشید روی مقادیر خاصی را بدون بازرسی دستی آنها در هر نقطه شکست.

  • PyCharm: برای نظارت بر آنها در طول اشکال زدایی، عباراتی را به صفحه “Watches” اضافه کنید.
  • Visual Studio Code: برای افزودن عبارات برای نظارت مستمر از صفحه “Watch” استفاده کنید.
  • بیکار: هنگامی که در نقطه شکست هستید، عبارت های تعاملی را تایپ کنید console برای رعایت ارزش های آنها

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

ابزارهای بیشتری وجود دارد که IDE برای اهداف اشکال زدایی فراهم می کند مانند:

  • “Python Profiler” در VSCode و نمایه ساز داخلی در PyCharm به عنوان ابزارهای پروفایل
  • “Code With Me” در PyCharm و برنامه های افزودنی مانند “Live Share” در VSCode برای اشکال زدایی مشارکتی

اشکال زدایی عملکرد:

لینترها و آنالایزرهای کد

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

در اینجا، ما در مورد چند مورد از این ابزارها – PyLint و mypy – صحبت خواهیم کرد تا بتوانید روش نصب آنها و روش کار آنها را مشاهده کنید.

روش نصب PyLint:

pip install pylint

اجرا کن pylint روی اسکریپت یا ماژول پایتون شما با استفاده از این دستور:

pylint your_script.py

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

PyLint را می توان مطابق با نیازهای خاص پروژه شما سفارشی کرد. شما می توانید یک فایل پیکربندی (معمولا با نام .pylintrc) ترجیحات خود را تعریف کنید. این فایل را می توان در root از پروژه شما به عنوان مثال:

[MASTER]
enable = all

[MESSAGES CONTROL]
disable = missing-docstring

در این مثال، ما همه بررسی‌ها را فعال می‌کنیم، به جز چک رشته‌ای که از دست رفته است. شما می توانید پیکربندی را متناسب با سبک کدنویسی و نیازهای پروژه خود تنظیم کنید.

روش نصب mypy:

pip install mypy

اجرا کن mypy روی اسکریپت یا ماژول پایتون شما با این دستور:

mypy your_script.py

Mypy کد شما را برای مشکلات مربوط به نوع بررسی می کند و بازخورد ارائه می کند روی عدم تطابق نوع بالقوه و نقض حاشیه نویسی نوع.

Mypy به ویژه زمانی مفید است که از حاشیه نویسی نوع در کد پایتون خود استفاده می کنید. بررسی می کند که انواعی که مشخص می کنید با استفاده واقعی از متغیرها، توابع و سایر عناصر در کد شما مطابقت داشته باشد.

اجازه دهید در مورد برخی از فرمت‌کننده‌های کد دیگر نیز بحث کنیم.

پولک 8

flake8 سه ابزار اصلی را ترکیب می کند:

  1. PyFlakes: این ابزار تجزیه و تحلیل کد ایستا را برای یافتن خطاها در کد پایتون شما بدون اجرای آن انجام می دهد.
  2. pycodestyle: این ابزار که قبلاً به عنوان pep8 شناخته می شد، کد شما را با راهنمای سبک مشخص شده در PEP 8 بررسی می کند و بازخورد ارائه می کند. روی نقض سبک کدنویسی
  3. مک کیب: این بررسی‌کننده پیچیدگی، بلوک‌های کد پیچیده‌ای را شناسایی می‌کند که درک یا نگهداری آن‌ها ممکن است سخت‌تر باشد.

روش نصب flake8:

pip install flake8

مشابه PyLint، می توانید flake8 را اجرا کنید روی کد پایتون خود را با اجرای دستور زیر در خود terminal:

flake8 your_file.py 
#Replace your_file.py with the actual name of your Python file.

مشابه PyLint، flake8 را می توان برای مطابقت با نیازهای پروژه شما پیکربندی کرد. شما می توانید یک فایل پیکربندی (معمولا با نام .flake8) در پروژه شما root فهرست راهنما. به عنوان مثال.

[flake8]
max-line-length = 88
extend-ignore = E203, W503

در این مثال، ما حداکثر طول خط را 88 کاراکتر تنظیم کرده و لیست خطاهای نادیده گرفته شده را گسترش می دهیم.

مشکی

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

مشکی مجموعه ای از قوانین قالب بندی دارد و آنها را به طور مداوم اعمال می کند. این موضوع بحث های مربوط به سبک کد را در تیم های توسعه حذف می کند.

با استفاده از این دستور می توانید Black را نصب کنید:

pip install black

و در اینجا روش استفاده از آن آمده است:

black your_file.py

رنگ مشکی مکمل لینترهای سنتی مانند PyLint و flake8 است. می توانید از این ابزارها به صورت ترکیبی استفاده کنید تا هم کیفیت کد و هم قالب بندی سازگار را تضمین کنید.

بسیاری از ویرایشگران محبوب دوست دارند Visual Studio Code، Atom و Sublime Text دارای افزونه ها یا افزونه هایی هستند که به شما امکان می دهند از این Code Linters و Analyzers نتایج مستقیماً در ویرایشگر هنگام نوشتن کد استفاده کنید.

پروفایل کردن

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

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

پایتون با ماژول‌های داخلی برای پروفایل‌سازی اولیه عرضه می‌شود. دو ماژول اصلی هستند cProfile و profile.

1. cProfile:

cProfile یک ماژول داخلی است که یک پروفایل قطعی از برنامه های پایتون ارائه می دهد. زمان اجرای هر تابع را ثبت می کند و شناسایی تنگناهای عملکرد را آسان تر می کند.

مثال:

import cProfile

def example_function():
    # Your code here

if __name__ == "__main__":
    cProfile.run('example_function()')

این یک گزارش دقیق از فراخوانی تابع، زمان اجرای آنها و درصد کل زمان صرف شده در هر تابع را ارائه می دهد.

2. مشخصات:

این profile ماژول مشابه است cProfile اما در پایتون خالص پیاده سازی شده است. تجزیه و تحلیل دقیق تری از فراخوانی های تابع ارائه می دهد و می تواند در مواقعی که به پروفایل دقیق تری نیاز است استفاده شود.

import profile

def example_function():
    # Your code here

if __name__ == "__main__":
    profile.run('example_function()')

هر دو cProfile و profile خروجی های مشابهی تولید می کند، اما اولی به طور کلی برای سربار پایین تر ترجیح داده می شود.

روش تجسم نتایج نمایه سازی:

در حالی که ماژول‌های داخلی گزارش‌های متنی ارائه می‌دهند، تجسم نتایج می‌تواند درک و تحلیل آن را آسان‌تر کند. یکی از ابزارهای محبوب برای این کار است snakeviz.

نصب snakeviz:

pip install snakeviz

استفاده از snakeviz:

import cProfile
import snakeviz

def example_function():
    # Your code here

if __name__ == "__main__":
    cProfile.run('example_function()', 'profile_results')
    snakeviz.view('profile_results')

با این کار یک پنجره مرورگر باز می شود که تصویری تعاملی از نتایج پروفایل را نمایش می دهد.

تکنیک های پیشرفته پروفایل سازی:

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

پروفایل خط:

پروفایل خط به شما امکان می دهد ببینید چقدر زمان صرف شده است روی هر خط کد در یک تابع این line_profiler ماژول معمولا برای این منظور استفاده می شود.

نصب line_profiler:

pip install line_profiler

با استفاده از line_profiler:

from line_profiler import LineProfiler

def example_function():
    # Your code here

if __name__ == "__main__":
    profiler = LineProfiler()
    profiler.add_function(example_function)

    profiler.run('example_function()')

    # Display the results
    profiler.print_stats()

این یک گزارش مفصل با زمان صرف شده نشان می دهد روی هر خط در example_function.

پروفایل حافظه:

درک استفاده از حافظه برای بهینه سازی کد بسیار مهم است. این memory_profiler ماژول به پروفایل مصرف حافظه کمک می کند.

نصب memory_profiler:

pip install memory-profiler

استفاده از memory_profiler:

from memory_profiler import profile

@profile
def example_function():
    # Your code here

if __name__ == "__main__":
    example_function()

هنگامی که اجرا شد، تجزیه و تحلیل خط به خط مصرف حافظه در طول اجرای example_function

درک استفاده از حافظه برای بهینه سازی کد بسیار مهم است. این memory_profiler ماژول به پروفایل مصرف حافظه کمک می کند.

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

چند نکته اضافی برای اشکال زدایی کارآمد:

  • نسخه کنترل و Git Bisect: از ویژگی‌های ارائه شده توسط سیستم کنترل نسخه خود برای ردیابی تغییرات استفاده کنید و در صورت نیاز به نسخه‌های فعال برگردید. اگر این اشکال اخیراً معرفی شده است و کنترل نسخه (مثلاً Git) را دارید، استفاده از git bisect می‌تواند به شما در شناسایی دقیق commit کمک کند. موضوع را معرفی کرد.
  • Documentation و نظرات کد: نوشتن کد و نظرات مستند می‌تواند به درک هدف توابع یا بلوک‌های کد خاص کمک کند و اشکال‌زدایی را هم برای شما و هم برای دیگرانی که ممکن است کارساز باشند ساده‌تر می‌کند. روی کد.
  • حل کردن مشکلات پیچیده: بلوک های کد بزرگ را به توابع کوچکتر و قابل آزمایش برای اشکال زدایی و نگهداری آسان تر تقسیم کنید.
  • استراحت کنید: دور شدن و بازگشت با چشم اندازی تازه اغلب می تواند راه حل هایی را آشکار کند که قبلاً آشکار نبودند.
  • اشکال زدایی اردک لاستیکی: مثل این است که یک جلسه درمانی برای کد شما داشته باشید، با این تفاوت که درمانگر یک اردک لاستیکی است. تصور کنید گیر کرده اید روی یک مشکل کدنویسی مشکل به جای اینکه از شخصی کمک بخواهید، با یک اردک لاستیکی صحبت می کنید. بله، یک اردک لاستیکی واقعی! کدت را خط به خط برای اردک توضیح می دهی، انگار همه چیز را می فهمد. حتی با وجود اینکه اردک بسیار بی ادب است و پاسخ نمی دهد، یک اتفاق جادویی رخ می دهد. با صحبت کردن در مورد مشکل خود با صدای بلند، خودتان شروع به دیدن راه حل می کنید.

روش جستجوی راه حل برای اشکالات و خطاها

1. استراتژی های جستجوی موثر:

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

2. استفاده از منابع وب:

  • مخازن GitHub: برای مشکلات مشابه، مخازن GitHub را جستجو کنید. بسیاری از پروژه ها دارای ردیاب هایی هستند که کاربران در مورد مشکلات و راه حل ها بحث می کنند.
  • Documentation و دفترچه راهنما: اسناد رسمی و راهنماها را برای فناوری هایی که استفاده می کنید بررسی کنید. گاهی اوقات، پاسخ ممکن است در اسناد رسمی یافت شود.
  • جستجوهای خاص سایت: از عملگر “site:” برای جستجو در یک وب سایت یا دامنه خاص استفاده کنید. این می تواند در هنگام جستجوی راه حل مفید باشد روی انجمن ها، اسناد، یا وبلاگ های خاص.
  • برخی از انجمن‌ها/سایت‌های مفید عبارتند از: Stack Overflow، بحث‌های GitHub، Reddit و سایر جوامع توسعه‌دهنده. این پلتفرم ها اغلب در مورد اشکالات رایج و راه حل های آنها بحث می کنند.

این راه هایی است که چگونه می توانید راه حلی برای مشکل خود پیدا کنید. حتی اگر منطبق دقیقی با مشکل خود پیدا نکنید، مسائل مشابه ممکن است بینش هایی را در مورد راه حل های بالقوه ارائه دهند.

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

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

نتیجه

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

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

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