猿问

无需尝试即可在Python中捕获键盘中断

Python中是否有某种方法可以捕获KeyboardInterrupt事件而不将所有代码放在try- except语句中?


如果用户按下Ctrl+,我想干净地退出而没有任何痕迹C。


鸿蒙传说
浏览 1394回答 3
3回答

叮当猫咪

是的,您可以使用模块signal安装中断处理程序,并使用threading.Event永远等待:import signalimport sysimport timeimport threadingdef 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()

拉风的咖菲猫

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

Qyouu

设置自己的信号处理程序的另一种方法是使用上下文管理器来捕获异常并忽略它:>>> 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块,同时保留一些明确的说明。这也允许您仅在代码的某些部分中忽略中断,而不必每次都设置和重置信号处理程序。
随时随地看视频慕课网APP

相关分类

Python
我要回答