如何避免Python中while循环外部代码触发ValueError异常?
解决方法
你可以通过统一输入逻辑的方式解决首行输入崩溃的问题,无需重复写异常捕获逻辑,优化后的代码如下:
valid_numbers = [100, 200, 3232] # 初始值设置为不在合法列表中的值即可触发首次输入逻辑 number = -1 while number not in valid_numbers: try: number = float(input('pick a number')) if number not in valid_numbers: print('wrong number') except ValueError: print("retry")
这个写法的优势:
- 所有用户输入的转换逻辑都被包裹在
try-except块中,无论是首次输入还是后续重试,遇到字符串输入都会触发重试提示,不会崩溃 - 没有重复的输入、校验代码,后续修改提示内容、合法数值只需要调整一处即可
如果你不想修改原有代码的整体结构,只单独给第二行输入加异常处理,可以用最小改动方案:
number = 0 #this to be removed # 给首次输入单独加异常捕获 while True: try: number = float(input('pick a number')) break except ValueError: print("retry") while number not in [100, 200, 3232]: try: print('wrong number ') number = float(input('pick a number;')) except ValueError: print("retry")
内容的提问来源于stack exchange,提问作者saZ
相关产品推荐
相关产品推荐

