在编写 Python 程序时,我们经常需要处理用户输入,尤其是在命令行界面(CLI)中。当用户通过按下 Ctrl-D
(在 Unix-like 系统中)或 Ctrl-Z
(在 Windows 系统中)发送 EOF(文件结束)信号时,Python 会抛出 EOFError
异常。正确处理这个异常可以让程序优雅地结束,并执行一些清理工作,比如打印用户之前输入的数据。
具体用法
- 处理 EOFError:使用
try-except
块来捕获EOFError
,并在except
块中执行需要的代码。 - 更新字典:使用字典来存储用户输入的项目及其数量。当用户输入一个新项目时,如果该项目已存在于字典中,则增加其计数;如果不存在,则添加到字典中并设置计数为 1。
- defaultdict:使用
defaultdict(int)
可以简化字典的初始化过程,因为任何尚未赋值的键都会自动初始化为0
。
示例代码
以下示例,使用 defaultdict
来简化字典的更新,并处理 EOFError
异常,在用户输入结束时打印出字典的内容。
from collections import defaultdict
# 创建一个 defaultdict,其默认值为 int 类型,即自动初始化为 0
grocery_list = defaultdict(int)
try:
# 无限循环,等待用户输入
while True:
# 获取用户输入
item = input("请输入商品名称 (或按下 Ctrl-D 键结束): ")
# 去除首尾空白字符并转换为小写
product = item.strip().lower()
# 更新字典,增加产品计数
grocery_list[product] += 1
except EOFError:
# 当用户发送 EOF 信号时,打印字典内容
for product, count in grocery_list.items():
print(f"{count} {product.upper()}")
假设用户输入了以下内容然后按下 Ctrl-D
:
apple
banana
apple
sugar
Ctrl-D
程序将输出:
1 APPLE
2 BANANA
1 SUGAR
这样,即使在处理 EOFError
异常后,程序也能按照预期执行所需的操作,打印出字典的内容。