在KeyboardInterrupt()上捕获回溯

时间:2016-07-01 12:10:44

标签: python

我有一个用来停在Ctrl + C上的代码。我做了Ctrl + C后,我想做一些事情。因此我写道:

try:
    work()
except KeyboardInterrupt:
    do_other_stuff()

但我不知道我在哪里做了Ctrl + C,因为没有Traceback打印;我想看到通常的消息

    Traceback (most recent call last):
       File "X.py", line 16, in <module>
         ...

我该如何打印?我试着做

    except KeyboardInterrupt as e:
       print str(e)
       do_other_stuff()

但它没有打印任何内容。

3 个答案:

答案 0 :(得分:4)

import sys, traceback
def func():
    try:
        work()
    except KeyboardInterrupt:
        do_something()
        traceback.print_exc(file=sys.stdout)

如果省略file,则输出转到stderr。 有关追溯的更多信息...... https://docs.python.org/2/library/traceback.html

答案 1 :(得分:1)

KeyboardInterrupt继承自BaseExceptionBaseException您可以使用traceback.format_exc(e)获取错误行。

答案 2 :(得分:0)

你很亲密:

try:
    while True:
        x = 1
except KeyboardInterrupt as e:
    print 'Here we are, in the error handler!'
    raise e

请确保在致电do_other_stuff()之前运行raise e