
当用户在 input() 执行过程中按下 Ctrl+C 时,Python 会抛出 KeyboardInterrupt 异常并终止程序,导致非零退出码和堆栈跟踪。本文介绍如何通过 try...except 捕获该异常,使程序安静退出并返回预期退出码。
当用户在 `input()` 执行过程中按下 ctrl+c 时,python 会抛出 `keyboardinterrupt` 异常并终止程序,导致非零退出码和堆栈跟踪。本文介绍如何通过 `try...except` 捕获该异常,使程序安静退出并返回预期退出码。
在 Python 中,input() 是一个阻塞式函数——它会一直等待用户输入,直到回车或被强制中断。当用户在等待期间按下 Ctrl+C(Windows/macOS/Linux 通用),Python 会立即触发 KeyboardInterrupt 异常。该异常继承自 BaseException,不会被通用的 except Exception: 捕获,因此若未显式处理,程序将崩溃并输出冗长的 traceback,退出状态码为 1(非零),不符合“静默退出”需求。
✅ 正确做法是使用 try...except KeyboardInterrupt: 显式捕获该中断信号:
try:
userInput = input('enter: ')
print(userInput)
except KeyboardInterrupt:
print("Program stopped by user.")
# 可选:显式退出并指定退出码(默认 sys.exit(0) 即成功退出)
# import sys; sys.exit(0)
? 关键说明:
- KeyboardInterrupt 必须单独捕获,不能依赖 except: 或 except Exception:;
- except KeyboardInterrupt: 会完全拦截中断信号,阻止 traceback 输出;
- 程序执行到 except 块后自然结束,Python 默认以退出码 0 返回(表示正常终止),符合题目中“exit code 0 or -1”的要求;如需明确退出码,可调用 sys.exit(0) 或 sys.exit(1);
- 不建议在 except 中静默吞掉异常(如空 except: pass),应至少提供用户友好的提示,提升交互体验。
? 进阶提示:若需支持多次输入并允许随时退出,可结合循环使用:
while True:
try:
userInput = input('enter (Ctrl+C to quit): ')
print(f"You entered: {userInput}")
except KeyboardInterrupt:
print("\nGoodbye!")
break # 退出循环,程序干净结束
综上,try...except KeyboardInterrupt: 不仅能消除报错,还能赋予程序可控、友好、专业的中断响应能力——这是命令行工具开发中的基础且重要实践。










