3 回答

TA贡献1776条经验 获得超12个赞
是的,您可以使用模块signal安装中断处理程序,并使用threading.Event永远等待:
import signal
import sys
import time
import threading
def signal_handler(signal, frame):
print('You pressed Ctrl+C!')
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C')
forever = threading.Event()
forever.wait()

TA贡献1995条经验 获得超2个赞
如果您只想不显示回溯,则使代码如下所示:
## all your app logic here
def main():
## whatever your app does.
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
# do nothing here
pass
(是的,我知道这并不能直接回答问题,但是还不清楚为什么需要try / except块会令人反感-也许这会减少对OP的困扰)

TA贡献1786条经验 获得超11个赞
设置自己的信号处理程序的另一种方法是使用上下文管理器来捕获异常并忽略它:
>>> class CleanExit(object):
... def __enter__(self):
... return self
... def __exit__(self, exc_type, exc_value, exc_tb):
... if exc_type is KeyboardInterrupt:
... return True
... return exc_type is None
...
>>> with CleanExit():
... input() #just to test it
...
>>>
这将删除try- except块,同时保留一些明确的说明。
这也允许您仅在代码的某些部分中忽略中断,而不必每次都设置和重置信号处理程序。
添加回答
举报