حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش دیباگ و تست‌نویسی در پایتون؛ رفع خطا با تمرین

پیش‌بینی assert در پایتون؛ توقف در اولین انتظار نادرست

تست‌نویسی پایتون با assert و آزمون‌های مؤثر · 0٪

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

مثال یک محاسبه درست رو بررسی می‌کنه و بعد مقدار نهایی رو برمی‌گردونه. در سؤال شرط عمداً غلطه تا محل توقف روشن بشه. خطای رایج تصور اینه که assert فقط یک هشدار چاپ می‌کنه و برنامه ادامه می‌ده. در اجرای معمول این دوره، شکستش یک استثناست و اجرا رو متوقف می‌کنه مگر اینکه صریحاً گرفته بشه. این درس try/except نداره. از assert برای کنترل اعتبار داده واقعی برنامه استفاده نمی‌کنیم؛ هدفش اینجا تست انتظارهای برنامه‌نویسه. برای ورودی نامعتبر واقعی، استثنای مشخص و قرارداد روشن رو در درس‌های بعد تمرین می‌کنیم.

✍️ مثال حل‌شده:

def checked_value():
    actual = 2 + 3
    assert actual == 5
    return actual

assert checked_value() == 5

حالا نوبت توئه: تابع check ابتدا actual=2+2 می‌سازد، سپس assert actual==5 و بعد return "تمام" دارد. در اجرای معمول پایتون بدون حالت بهینه‌سازی و بدون except چه رخ می‌دهد؟ پاسخ را از روی شرط assert بده؛ return بعدی تنها در صورت عبور از آن اجرا می‌شود.

فعالیت شما

تابع check ابتدا actual=2+2 می‌سازد، سپس assert actual==5 و بعد return "تمام" دارد. در اجرای معمول پایتون بدون حالت بهینه‌سازی و بدون except چه رخ می‌دهد؟ پاسخ را از روی شرط assert بده؛ return بعدی تنها در صورت عبور از آن اجرا می‌شود.

مطالعهٔ این گام برای همه آزاد است

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

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

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

کد اولیهٔ فعالیت

def check():
    actual = 2 + 2
    assert actual == 5
    return "تمام"

check()

گزینه‌های پیش‌بینی خروجی

  1. AssertionError ایجاد می‌شود و return اجرا نمی‌شود.
  2. رشته تمام برمی‌گردد چون assert فقط هشدار است.
  3. عدد 5 برمی‌گردد چون assert مقدار actual را اصلاح می‌کند.