ترفند پایتونی 1 – assert
اگر برنامه نویسی، حتی در حد مختصر هم کرده باشید یه جاههایی از کد به خطاهایی در منطق کدتون برخورد می کنید. اگه از قبل بخواهید آمادگی لازم برای مواجه با این خطاها پیدا کنید گزینه هایی وجود داره! در این ترفند به بررسی assert می پردازیم. به قول Dan Brader نویسنده کتاب python tricks که منبع این پست هم هست :
Covering Your A** With Assertions
و اما assert، به developer کمک می کنه تا بتونه راحت تر debug کنه و خطای کد رو متوجه بشه!
به طور مثال می خواهید با تابع زیر تخفیفی رو برای محصولی در نظر بگیرید و قیمت رو پس از کسر تخفیف مورد نظرتون برگردونید.
1 2 3 4 |
def apply_discount(product, discount): price = int(product['price'] * (1.0 - discount)) assert 0 <= price <= product['price'] return price |
عبارت assert 0 <= price <= product[‘price’] در صورتی که مقدار قیمت پس از اعمال تخفیف از صفر کمتر بشه (منفی بشه) یا بیشتر از قیمت ابتدایی بشه خطایی با عنوان AssertionError بر میگردونه ولی در صورتی که در بازه مورد نظر باشه به کارش ادامه میده!
با تست کد بالا با مقادیر زیر:
1 2 |
shoes = {'name': 'Fancy Shoes', 'price': 14900} print(apply_discount(shoes, 0.25)) |
مقدار 11175 برگردانده می شود
1 2 |
shoes = {'name': 'Fancy Shoes', 'price': 14900} print(apply_discount(shoes, -0.25)) |
ولی اگر تخفیف رو منفی کنیم با خطای AssertionError مواجه میشیم!
چطور در پایتون assert بنویسیم؟
سینتکس پایتونی برای این کار به صورت زیره :
1 |
assert_stmt ::= "assert" expression1 ["," expression2] |
بخش اول عبارت بالا همون بخش منطق و logic است و عبارت دوم که اختیاری هم هست متنیه که می خواهید در صورت بروز خطا نشون داده بشه.
همچنین بد نیست بدونید در حقیقت عبارت بالا توسط مفسر پایتون به صورت زیر اجرا میشه :
1 2 3 |
if __debug__: if not expression1: raise AssertionError(expression2) |
یکی از مزایای استفاده از assert کمک به پیدا کردن خطاهایی هستند که در هنگام پیدا کردن خطا باهاشون مواجه میشید (هنگام دیباگ یه باگ به باگ میخوری!) این باگ ها به Heisenbug معروفند (بر گرفته شده از اصل عدم قطعیت هایزنبرگ).
دو نکته رو قبل از هر گونه استفاده از assert در نظر داشته باشید. اول این که؛ از assert برای data validation استفاده نکنید و دوم؛ وقتی شما یک tuple به عنوان اولین آرگومان به assert می دهید حتی اگه منطقتون خطا هم باشه همیشه true خواهد شد.
مطالب جدید
دستهها
- Books (۱۲)
- Excel (۲)
- اکسل به زبان مثال …! (۹)
- ترفند های پایتونی (۶)
- هوش تجاری (۴۸)
- Power BI (۳۶)
- DAX (۱۳)
- Power Query (۹)
- SQL (۸)
- SSIS (۲)
- Power BI (۳۶)
- یادگیری ماشین (۸)
- ML Algorithm (۲)
- kNN (۲)
- pandas (۵)
- ML Algorithm (۲)
بایگانی
آمار بازدید
- ۰
- ۵۱
- ۲۱
- ۴۳,۶۲۰
- ۲۷ اردیبهشت, ۱۴۰۳