Python 捕获全局的 KeyboardInterrupt 异常

当然,像下面这种情况。

你要是把所有代码像下面那样都放到 try, except 的情况,就当我什么也没说。

import time


def main():
    print('before ...')
    time.sleep(10)
    print('after ...')


if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print('\nKeyboardInterrupt ...')
    print('the end')
root@master ~/w/python3_learning# python3 test.py 
before ...
^C
KeyboardInterrupt ...
the end

一般情况下,程序运行过程当中要执行的代码量会比较大,一般用户执行 Ctrl + C 程序就报错 KeyboardInterrupt 停止了。

import time


def main():
    print('before ...')
    time.sleep(10)
    print('after ...')


if __name__ == '__main__':
    main()
    print('the end')
root@master ~/w/python3_learning# python3 test.py 
before ...
^CTraceback (most recent call last):
  File "test.py", line 11, in <module>
    main()
  File "test.py", line 6, in main
    time.sleep(10)
KeyboardInterrupt

但是有时候,我们希望用户在 Ctrl + C 之后再继续执行一些清理操作。

import sys
import time


def suppress_keyboard_interrupt_message():
    old_excepthook = sys.excepthook

    def new_hook(exctype, value, traceback):
        if exctype != KeyboardInterrupt:
            old_excepthook(exctype, value, traceback)
        else:
            print('\nKeyboardInterrupt ...')
            print('do something after Interrupt ...')
    sys.excepthook = new_hook


def main():
    print('before ...')
    time.sleep(10)
    print('after ...')


if __name__ == '__main__':
    suppress_keyboard_interrupt_message()
    main()
    print('the end')
root@master ~/w/python3_learning# python3 test.py 
before ...
^C
KeyboardInterrupt ...
do something after Interrupt ...

由于 suppress_keyboard_interrupt_message 函数中的 new_hook 是自定义的,所以你也不一定局限于只处理某种异常,甚至对所有异常做统一处理也是可以的。

### 回答1: KeyboardInterrupt异常Python中的一种异常类型,当程序运行时,用户按下了键盘上的中断键(通常是Ctrl+C),就会触发这个异常。这个异常通常用于中断正在运行的程序,以便进行其他操作。在捕获这个异常时,可以执行一些清理操作,然后退出程序。 ### 回答2: KeyboardInterrupt异常Python中常见的异常之一,通常在代码中按下Ctrl+C时触发。该异常用于停止程序的运行并退出程序。 发生KeyboardInterrupt异常时,程序会释放已分配的内存和已打开的文件,并立即退出。这是一种非常有用的功能,因为当程序运行时间太长或者陷入无限循环时,我们可以通过Ctrl+C来快速中止程序的运行。 在处理KeyboardInterrupt异常时,我们可以捕获异常并执行一些清理操作,例如关闭文件、网络连接等。如果我们确信程序不会陷入死循环,可以在捕获异常后输出一些提示信息并正常退出程序。 总的来说,KeyboardInterrupt异常Python中的一个非常实用的功能,可以帮助我们快速中断程序的运行,从而避免程序出现一些异常情况。在编写代码时,我们应该时刻记得为我们的程序添加异常处理代码,以处理各种意外的异常情况。 ### 回答3: 在Python中,键盘中断异常指的是在程序正在运行时,用户敲击了“Ctrl+C”键,从而导致程序停止运行的异常情况。当用户敲击“Ctrl+C”时,Python解释器会接收到一个 Interrupt 信号,这个信号会被发送到当前运行的程序中,从而引发一个 Keyboard Interrupt 异常Python中的KeyboardInterrupt异常通常出现在循环体内部,当用户按下“Ctrl+C”键时,程序就会退出循环,从而停止执行后续的代码。如果程序中没有做好异常处理机制,就会导致程序崩溃或者出现意料之外的错误。 为了避免程序因为用户敲击“Ctrl+C”键而崩溃,我们可以通过添加try-except代码块来捕获KeyboardInterrupt异常。在except代码块中,我们可以添加一些代码,以确保程序在捕获异常后可以正常退出。 例如,下面的代码演示了如何避免KeyboardInterrupt异常的发生: ``` try: while True: # 执行一些操作 except KeyboardInterrupt: print("程序已经停止运行") ``` 在这个例子中,我们使用了一个无限循环来执行某些操作,如果用户按下“Ctrl+C”键,就会退出循环,并在屏幕上显示“程序已经停止运行”的提示信息。这个代码块中的except语句就是用来捕获KeyboardInterrupt异常并处理它的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值