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

