当前位置: 代码网 > it编程>前端脚本>Python > Python捕获全局的KeyboardInterrupt异常的方法实现

Python捕获全局的KeyboardInterrupt异常的方法实现

2024年08月20日 Python 我要评论
当然,像下面这种情况。你要是把所有代码像下面那样都放到 try, except 的情况,就当我什么也没说。import timedef main(): print('before ...')

当然,像下面这种情况。

你要是把所有代码像下面那样都放到 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 是自定义的,所以你也不一定局限于只处理某种异常,甚至对所有异常做统一处理也是可以的。

到此这篇关于python捕获全局的keyboardinterrupt异常的方法实现的文章就介绍到这了,更多相关python keyboardinterrupt异常内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com