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

如何在KeyboardInterrupt时移除Traceback,仅输出自定义异常信息?

如何让Python脚本中断时只显示自定义异常信息,不输出Traceback?

我懂你的需求——你写了下面这段循环打印的Python脚本:

i=1
while True:
    try:
        print i
    except KeyboardInterrupt:
        raise Exception("Ended by user.")
    i = i+1

按下Ctrl+C中断时,会弹出一大串Traceback调用栈信息,但你只想看到最后那句Exception: Ended by user.对吧?

问题出在你在except块里用了raise——这个操作会主动抛出新的异常,Python默认会把完整的调用栈(Traceback)打印出来。要实现你想要的效果,有两种简单的处理方式:

方法一:直接打印信息并退出循环

这是最直观的做法,捕获到KeyboardInterrupt后,直接输出你想要的内容,然后退出循环结束脚本,完全不需要重新抛出异常:

i = 1
while True:
    try:
        print(i)  # 如果你用的是Python3,记得给print加括号哦
        i += 1
    except KeyboardInterrupt:
        print("Exception: Ended by user.")
        break

方法二:用sys.exit优雅退出

如果你希望脚本以“异常终止”的状态码退出,但依然不显示Traceback,可以借助sys模块的exit方法:

import sys

i = 1
while True:
    try:
        print(i)
        i += 1
    except KeyboardInterrupt:
        print("Exception: Ended by user.")
        sys.exit(1)  # 非0状态码表示异常终止,和抛出异常的状态一致

这两种方法都能让你在中断脚本时,只看到那句自定义的提示,不会出现一堆Traceback信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:30:49