ValueError با TypeError فرق داره. گاهی نوع آرگومان قابل قبوله اما مقدارش برای کار موردنظر معنی نداره. int رشته میپذیره، ولی هر رشتهای نمایش عدد صحیح نیست. مثلاً متن اعشاری با نقطه رو نمیشه مستقیماً با int به عدد صحیح تبدیل کرد. این رفتار رو باید از تبدیل float یا بریدن دستی متن جدا بدونیم.
مثال، فاصله دور یک عدد صحیح رو بدون مشکل تبدیل میکنه. سؤال اصلی رشتهای داره که نمایش عدد اعشاریه. خطای رایج تصور اینه که int هر متن عددگونه رو خودکار گرد میکنه؛ این تابع در تبدیل مستقیم رشته چنین قراردادی نداره. اگه واقعاً ورودی اعشاری میخواهیم باید از قبل درباره نوع خروجی و روش گردکردن تصمیم بگیریم. توی این درس هیچ try/except وجود نداره، پس اجرای ناموفق متوقف میشه و مقدار بازگشتی به دست نمیاد. قبل از انتخاب جواب به نوع خود ورودی و شکل محتوای داخل رشته جدا نگاه کن.
✍️ مثال حلشده:
assert int(" 15 ") == 15
# فاصله دور نمایش صحیح پذیرفته میشود.
حالا نوبت توئه: در تابع parse، دستور return int("3.5") اجرا میشود و هیچ مدیریت استثنایی وجود ندارد. نتیجه چیست؟ تبدیل مستقیم رشته را در نظر بگیر؛ float یا گردکردن دیگری در برنامه انجام نشده و نوع ورودی همچنان str است.
فعالیت شما
در تابع parse، دستور return int("3.5") اجرا میشود و هیچ مدیریت استثنایی وجود ندارد. نتیجه چیست؟ تبدیل مستقیم رشته را در نظر بگیر؛ float یا گردکردن دیگری در برنامه انجام نشده و نوع ورودی همچنان str است.