input() 读取
拿到键盘输入后,正常情况下一律得到 str,数字外观不会自动变成数字类型。
INPUT CHECKPOINT
一个可靠的输入流程,不会期待用户永远输入正确;它会把失败当成预期分支来处理。
拿到键盘输入后,正常情况下一律得到 str,数字外观不会自动变成数字类型。
执行 int(raw)。无法解释成整数时抛出 ValueError。
转换成功也未必合理,还要确认数值是否落在 0~150。
返回已经验证过的值,后续计算可以相信它的类型与范围。
input() 没有读到任何数据时抛出 EOFError;它不是普通的空字符串。
捕获转换错误或提示范围错误,不让程序直接崩溃。
失败不退出函数,循环会取队列中的下一次输入;成功时用 return 或 break 离开。
用户键入 42,原始结果仍是字符串 "42"。要计算,先明确转换。
int("二十") 不是类型不匹配,而是内容无法转换,因此进入值错误分支。
直接按回车通常得到 "";EOF 表示输入源已经结束,会走异常分支。
循环负责重试,try/except 负责接住可预料的转换失败,各自分工。
避坑提醒:不要用一个宽泛的 except: 把所有问题都吞掉。只捕获当前步骤能处理的异常,比如转换时的 ValueError、输入结束时的 EOFError,程序出了别的问题才不会悄悄被藏住。