Python循环触发ValueError时,如何回到同一迭代的起始位置?
解决方案
当然可以实现回到当前循环迭代的起始位置,核心思路是在每个循环迭代内部嵌套一个while循环,用来反复获取输入直到得到合法值或触发退出条件。这样当输入非法触发ValueError时,会重新回到输入提示环节,而不会跳转到下一个迭代。
修改后的代码示例:
n = 5 n_list = [] for i in range(n): while True: x = input('enter exponent n(q to quit) >') # 处理退出逻辑 if x == 'q': if i == 0: # 第一个输入q,终止程序 exit() else: # 后续输入q,返回已输入的列表 print(n_list) exit() # 尝试转换为浮点数 try: num = float(x) n_list.append(num) break # 输入合法,跳出内部while,进入下一个for迭代 except ValueError: print("That's not a number!!!")
关键说明:
- 内部的
while True循环会持续运行,直到用户输入合法的浮点数(此时执行break进入下一个for迭代),或者输入q触发退出逻辑。 - 原代码存在逻辑漏洞:触发ValueError后仍会执行
n_list.append(float(x)),会再次抛出异常;修改后只有转换成功时才会添加到列表,避免了这个问题。 - 原代码中的
return在非函数环境下会报错,这里换成exit()更适配脚本执行场景,若代码位于函数内可保留return。
内容的提问来源于stack exchange,提问作者Manas Phani Chandra Reddy
相关产品推荐
相关产品推荐

