Python 3如何在转换变量类型前预判是否会引发程序崩溃?
解决userinput函数类型转换崩溃问题
你的问题出在直接调用int()或float()转换非数字输入时,会触发ValueError异常导致程序崩溃,同时原代码里的类型判断逻辑也存在错误(type(a) != valtype中valtype是字符串,而type(a)返回的是类型对象,两者永远不相等)。以下是修复后的代码:
import time def userinput(text, valan, valtype): if valan == 0 and valtype == 0: return input(text) elif valan == 0 and valtype != 0: while True: a = input(text) try: if valtype == "int": a = int(a) elif valtype == "float": a = float(a) # 转换成功直接返回结果 return a except ValueError: print("Invalid answer.") time.sleep(1) print("Try again.") time.sleep(1) elif valan != 0 and valtype == 0: while True: a = input(text) if a in valan: return a print("Invalid answer.") time.sleep(1) print("Try again.") time.sleep(1)
关键改动说明
- 新增
try-except块捕获类型转换时的ValueError,输入无法转换为指定类型时,提示错误并重新发起输入 - 简化循环逻辑,去掉冗余的
val标记,转换成功或输入符合选项时直接返回结果,代码更简洁高效 - 修复原代码中类型判断的逻辑错误,不再用
type(a)和字符串类型名对比,通过转换是否成功验证输入有效性 - 补充
import time语句,避免调用time.sleep时出现导入错误
内容的提问来源于stack exchange,提问作者Nugget Gamer
相关产品推荐
相关产品推荐

