assertion

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/11
  • تعداد بازدید: 469

Assertion یا تاکید

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

۱. ساختار پایه assert
# ساختار ساده
assert condition

# با پیام خطا
assert condition, "Error message"
۲. مثال ساده
print(1)
assert 2 + 2 == 4
print(2)
assert 1 + 1 == 3
print(3)  # این خط اجرا نمی‌شود

خروجی:

1
2
AssertionError
۳. مثال با پیام خطای سفارشی
temp = -10
assert temp >= 0, "دما نمی‌تواند کمتر از صفر مطلق باشد!"

خروجی:

AssertionError: دما نمی‌تواند کمتر از صفر مطلق باشد!
۴. کاربردهای رایج assert

assert در سه موقعیت اصلی استفاده می‌شود:

  • اعتبارسنجی ورودی‌ها: بررسی صحت ورودی‌های تابع
  • بررسی صحت خروجی‌ها: اطمینان از درستی نتایج
  • تست نرم‌افزار: نوشتن تست‌های واحد (Unit Tests)
۵. مثال کاربردی: اعتبارسنجی ورودی تابع
def calculate_average(numbers):
    """محاسبه میانگین اعداد"""
    assert numbers, "لیست نباید خالی باشد"
    assert all(isinstance(n, (int, float)) for n in numbers), "همه مقادیر باید عدد باشند"
    
    return sum(numbers) / len(numbers)


# استفاده صحیح
print(calculate_average([10, 20, 30]))  # خروجی: 20.0

# استفاده نادرست - لیست خالی
print(calculate_average([]))  # AssertionError: لیست نباید خالی باشد
۶. مثال کاربردی: تست با pytest

یکی از مهم‌ترین کاربردهای assert در تست‌نویسی است. کتابخانه pytest از assert برای بررسی نتایج تست استفاده می‌کند:

# فایل: test_calculator.py

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


def divide(a, b):
    return a / b


# بخش تست ها

def test_add_positive_numbers():
    assert add(2, 3) == 5


def test_add_negative_numbers():
    assert add(-1, -1) == -2


def test_divide():
    assert divide(10, 2) == 5.0


اجرای تست:

$ pytest test_calculator.py -v

test_calculator.py::test_add_positive_numbers PASSED
test_calculator.py::test_add_negative_numbers PASSED
test_calculator.py::test_divide PASSED

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

هشدار: دستورات assert در زمان اجرا با پرچم -O (optimized) به طور کامل نادیده گرفته می‌شوند و هیچ کدی اجرا نمی‌شود!

# فایل: example.py
def process_data(data):
    assert data is not None, "داده نباید None باشد"
    assert isinstance(data, list), "داده باید لیست باشد"
    # پردازش داده...
    return data

اجرای عادی:

$ python example.py
# assert ها بررسی می‌شوند

اجرا با پرچم -O:

$ python -O example.py
# تمام assert ها نادیده گرفته می‌شوند!

نتیجه: به همین دلیل، assert نباید برای مدیریت خطاهای برنامه استفاده شود. برای اعتبارسنجی‌های مهم در محیط Production از if/raise استفاده کنید:

# ❌ نادرست - استفاده از assert برای منطق اصلی
def withdraw_money(account, amount):
    assert amount > 0, "مبلغ باید مثبت باشد"
    # ...

# ✅ درست - استفاده از if/raise برای اعتبارسنجی مهم
def withdraw_money(account, amount):
    if amount <= 0:
        raise ValueError("مبلغ باید مثبت باشد")
    # ...
 خلاصه: چه زمانی از assert استفاده کنیم؟
استفاده کنید ✅ استفاده نکنید ❌
تست و دیباگ مدیریت خطاهای برنامه
اعتبارسنجی ورودی در توسعه اعتبارسنجی ورودی کاربر
بررسی فرضیات داخلی جایگزین try/except
نوشتن Unit Test شرط‌هایی که باید همیشه بررسی شوند

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد
0/600

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.