رفع خطای پایتون با هوش مصنوعی؛ روش گام‌به‌گام

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

تتیم GPT Plus۵ دقیقه مطالعه
ذره‌بین تشخیصی روی بخش قطع‌شده یک مسیر کدنویسی آبی

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

قبل از فرستادن کد چه اطلاعاتی آماده کنیم؟#

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

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

مثال آموزشی: جمع مبلغ متنی#

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

rows = [{"amount": "120"}, {"amount": "80"}, {"amount": ""}]
total = sum(int(row["amount"]) for row in rows)
print(total)

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

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

پرامپت آماده برای دیباگ پایتون#

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

یک اصلاح شفاف، تبدیل مقدار را در تابع کوچکی نگه می‌دارد:

def sum_amounts(rows):
    total = 0
    rejected = []
    for index, row in enumerate(rows):
        raw = row.get("amount")
        if not isinstance(raw, str) or not raw.strip():
            rejected.append({"index": index, "reason": "missing"})
            continue
        try:
            amount = int(raw)
        except ValueError:
            rejected.append({"index": index, "reason": "invalid_integer"})
            continue
        total += amount
    return total, rejected

assert sum_amounts([{"amount": "120"}, {"amount": "80"}]) == (200, [])
assert sum_amounts([{"amount": "0"}]) == (0, [])
assert sum_amounts([{"amount": ""}])[1][0]["reason"] == "missing"
assert sum_amounts([{"amount": "abc"}])[1][0]["reason"] == "invalid_integer"

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

خطا را به کوچک‌ترین نمونه تبدیل کنید#

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

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

تفاوت خطای محیط و خطای منطق#

نشانهپرسش مفید از مدلبررسی مستقل
ModuleNotFoundErrorکدام محیط اجرا بسته را نمی‌بیند؟مسیر interpreter و محیط مجازی
TypeErrorنوع واقعی ورودی چیست؟چاپ نوع روی نمونه ناشناس
KeyErrorکلید در همه ردیف‌ها هست؟قرارداد داده و ردیف ناقص
خروجی عددی غلطکدام فرض محاسبه اشتباه است؟جواب دستی روی دیتاست کوچک
رفتار ناپایدارچه شرطی بین اجراها تغییر می‌کند؟ثبت زمان، ترتیب و وضعیت

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

آزمون بازگشت خطا را نگه دارید#

آزمون بازگشت باید همان وضعیت خرابی را بازسازی کند و رفتار درست را بسنجد. صرف اینکه تابع «اجرا شد» کافی نیست. در مثال مبلغ، باید مجموع و فهرست ردشدگان را کنترل کرد؛ وگرنه تابعی که همیشه صفر می‌دهد نیز ممکن است از آزمون ضعیف عبور کند.

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

یک یادداشت کوتاه شامل علت، تغییر، ورودی بازتولید و آزمون نگهداری‌شده بسازید. برای الگوهای متنی، ساخت Regex و برای ثبت راه‌اندازی پروژه، مستندسازی کد با هوش مصنوعی مسیر ادامه هستند. با یک مثال کوچک و پاک‌شده از اطلاعات خصوصی، می‌توانید پرامپت دیباگ را در GPT Plus امتحان کنید.

سوالات متداول

برای دیباگ چه اطلاعاتی بفرستیم؟

متن کامل خطا، نسخه محیط، کد کوچک بازتولیدکننده و خروجی مورد انتظار را بدهید. اطلاعات خصوصی و رازها را از نمونه حذف کنید.

آیا گرفتن همه استثناها مشکل را حل می‌کند؟

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

آزمون بازگشت چه فایده‌ای دارد؟

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

اشتراک‌گذاری:تلگرامواتساپX
ت
تیم GPT Plus

ما در GPT Plus هر روز با مدل‌های هوش مصنوعی کار می‌کنیم و تجربه‌هایمان را به فارسی می‌نویسیم تا استفاده از AI برای همه ساده‌تر شود.

آماده‌ای امتحانش کنی؟

همین حالا رایگان با GPT Plus شروع کن.

شروع رایگان