You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从内层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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:52:47