ممکنه یک خطا روی len دیده بشه، اما مشکل از جایی باشه که مقدار None تولید شده. برای پیداکردن علت اولیه، مقدار ورودی عملیات ناموفق رو دنبال میکنیم. دیکشنری get وقتی کلید وجود نداره بهصورت پیشفرض None میده. اگه قرارداد ما بگه نبودن کلید یعنی فهرست خالی، باید این تصمیم رو موقع خواندن داده روشن کنیم.
مثال برای نقشهای اختیاری یک کاربر مقدار پیشفرض خالی میذاره. توی تمرین، برچسبها اختیاریاند و len نباید روی None اجرا بشه. خطای رایج گذاشتن except دور len و برگرداندن صفر برای هر استثناست؛ این کار نوعهای نامعتبر دیگر رو هم پنهان میکنه. اینجا فقط حالت نبودن کلید رو مدیریت میکنیم و طبق قرارداد، مقدار موجود حتماً یک فهرسته. با اصلاح همون محل تولید مقدار، ادامه تابع ساده باقی میمونه. دقت کن فهرست خالی و کلید غایب دو ورودی متفاوتاند، حتی اگر خروجی هر دو صفر باشه.
✍️ مثال حلشده:
record = {}
roles = record.get("roles", [])
assert len(roles) == 0
حالا نوبت توئه: تابع label_count(record) تعداد اعضای record["labels"] را برگرداند. اگر کلید labels وجود ندارد، آن را فهرست خالی در نظر بگیر. مقدار موجود همیشه فهرست است؛ {} و {"labels":[]} باید 0 و {"labels":["وب","تمرین"]} باید 2 بدهند. دیکشنری را تغییر نده و استثناهای نامرتبط را نپوشان.
فعالیت شما
تابع label_count(record) تعداد اعضای record["labels"] را برگرداند. اگر کلید labels وجود ندارد، آن را فهرست خالی در نظر بگیر. مقدار موجود همیشه فهرست است؛ {} و {"labels":[]} باید 0 و {"labels":["وب","تمرین"]} باید 2 بدهند. دیکشنری را تغییر نده و استثناهای نامرتبط را نپوشان.