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
相关产品推荐
相关产品推荐

