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

CS50p学习疑问:如何将Python Try块精简为仅一行输入代码?

调整代码实现Try块仅保留输入操作

要实现Try块只放输入相关代码,核心是拆分可能触发异常的操作:只有input()会触发EOFError,而KeyError是访问字典不存在的键导致的,把这部分逻辑移到Try块外处理即可。

方案1:用判断避免KeyError(更直观)

price = 0
menu = {"Burger": 5, "Fries": 3, "Soda": 2}  # 替换为你的实际菜单

while True:
    try:
        # Try块仅保留输入及格式化操作
        order = input("Order: ").title().strip()
    except EOFError:
        break  # 捕获输入终止(如Ctrl+D)的情况
    
    # 业务逻辑移到Try块外,用判断避免KeyError
    if order not in menu:
        break  # 对应原代码中KeyError时的break逻辑
    
    price += menu[order]
    print(f"Total: ${price}")

方案2:单独捕获KeyError(贴合原异常处理逻辑)

如果想保留用异常捕获的方式处理无效菜品,也可以把字典访问逻辑放到另一个Try块:

price = 0
menu = {"Burger": 5, "Fries": 3, "Soda": 2}

while True:
    try:
        order = input("Order: ").title().strip()
    except EOFError:
        break
    
    try:
        price += menu[order]
        print(f"Total: ${price}")
    except KeyError:
        break

关键说明

  • 原代码中if order in menu已经避免了KeyError,所以原except里的KeyError其实不会被触发,调整后要么用判断直接处理无效输入,要么明确捕获字典访问的异常,逻辑更清晰。
  • Try块只保留input()相关操作,符合“Try块仅包含可能触发目标异常的代码”的原则,便于定位问题。

内容的提问来源于stack exchange,提问作者Gavin Reid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:07:08