TypeError معمولاً میگه یک عملیات با نوع دادهای که گرفته سازگار نیست. جمع عدد و رشته، فراخوانی چیزی که تابع نیست یا دادن آرگومان نامناسب از نمونههای رایجن. پیام خطا رو فقط اسم استثنا نبین؛ معمولاً نوعهای درگیر رو هم میگه و راه بررسی رو کوتاه میکنه. بعد باید مشخص کنی قرارداد تابع واقعاً چه نوعی رو قبول میکنه.
مثال یک مقدار متنی شمارش رو قبل از جمع به عدد تبدیل میکنه. تبدیل خودکار همهچیز همیشه تصمیم درستی نیست؛ اگر تابع فقط عدد میپذیره، شاید لازم باشه فراخواننده اصلاح بشه. خطای رایج تبدیل همه مقدارها به str برای ساکتکردن خطاست. اون کار ممکنه بهجای جمع عددی، چسباندن متن تولید کنه و یک خطای روشن رو به جواب غلط تبدیل کنه. در این نمونه قرارداد صریحاً رشته عددی معتبره، پس int معنی داره. قبل از اصلاح هر TypeError، مقدار واقعی و نوعش رو با انتظار تابع کنار هم بذار.
✍️ مثال حلشده:
def add_bonus(count_text):
count = int(count_text)
return count + 2
assert add_bonus("6") == 8
حالا نوبت توئه: تابع add_bonus رشته عدد صحیح معتبر میگیرد و دو واحد اضافه میکند؛ "6" باید 8 و "0" باید 2 بدهد. این گام آموزشی است؛ توضیح بده چرا count_text + 2 TypeError میدهد ولی int(count_text) + 2 مطابق قرارداد است. رشته نامعتبر جزو ورودی این نمونه نیست.
فعالیت شما
تابع add_bonus رشته عدد صحیح معتبر میگیرد و دو واحد اضافه میکند؛ "6" باید 8 و "0" باید 2 بدهد. این گام آموزشی است؛ توضیح بده چرا count_text + 2 TypeError میدهد ولی int(count_text) + 2 مطابق قرارداد است. رشته نامعتبر جزو ورودی این نمونه نیست.