如何从内层While True循环退出外层循环以关闭Python计算器
解决方案:终止外层循环实现正常退出
你的问题核心是外层的while True没有终止条件——当输入exitbreak内层循环后,外层循环会执行finally块然后重新进入下一轮,导致程序重启。下面给两种简单直接的解决方法:
方法1:用布尔变量控制外层循环
设置一个running标志,当用户输入exit时将其设为False,让外层循环自然终止:
from rich import print from rich.prompt import Prompt running = True while running: try: while True: num1 = Prompt.ask("输入第一个数字(输入exit退出)") if num1.lower() == 'exit': running = False # 标记外层循环终止 break num2 = Prompt.ask("输入第二个数字") try: # 尝试计算,捕获当前输入组的异常 result = float(num1) + float(num2) print(f"[green]结果:{result}[/green]") except ValueError as e: print(f"[red]输入错误:{e},请重新输入一组数字[/red]") continue # 跳过当前组,重新开始输入 except Exception as e: print(f"[red]意外错误:{e}[/red]") finally: if running: print("计算器已重置,准备下一组计算") else: print("[blue]正在关闭计算器...[/blue]")
方法2:抛出自定义异常终止外层循环
定义一个专属的退出异常,当用户输入exit时抛出,外层捕获后直接break循环:
from rich import print from rich.prompt import Prompt # 定义自定义退出异常 class ExitCalculator(Exception): pass while True: try: while True: num1 = Prompt.ask("输入第一个数字(输入exit退出)") if num1.lower() == 'exit': raise ExitCalculator() # 抛出退出异常 num2 = Prompt.ask("输入第二个数字") result = float(num1) + float(num2) print(f"[green]结果:{result}[/green]") except ValueError as e: print(f"[red]输入错误:{e},请重新输入[/red]") except ExitCalculator: print("[blue]正在关闭计算器...[/blue]") break # 终止外层循环 finally: # 只有非退出异常时才提示重置 if not isinstance(locals().get('e'), ExitCalculator): print("计算器已重置,准备下一组计算")
两种方法都能实现:输入exit后,既终止内层计算循环,也让外层的异常处理循环停止,从而正常关闭程序。
内容的提问来源于stack exchange,提问作者Lorak
相关产品推荐
相关产品推荐

