Python中的SIGINT和异常处理

Vla*_*nin 6 python signals

import signal
import sys
import time

def sigint_handler(signal, frame):
    print "signal"
    sys.exit(0)

signal.signal(signal.SIGINT, sigint_handler)

while 1:
    try:
        print "text"
        time.sleep(2)
    except KeyboardInterrupt:
        print "keybi"
        exit(0)
    except:
        print "except"
        continue
Run Code Online (Sandbox Code Playgroud)

当我按下时,Ctrl-C我看到"信号"和"除外",程序没有退出.

  1. 为什么程序没有退出,而它显然达到了sys.exit(0)

  2. 为什么程序流不到达该KeyboardInterrupt部分?

  3. 在不退出的情况下,在不同的地方分别Ctrl-C处理和处理每个except:案例的简洁方法是什么?

use*_*ica 7

该程序不会退出,因为sys.exit通过抛出SystemExit异常,你的毯子except捕获它.

except KeyboardInterrupt不火,因为SIGINT处理程序安装覆盖默认的SIGINT处理程序,默认SIGINT处理程序负责抚养KeyboardInterrupt,当你按下Ctrl-C.

至于你的第三个问题,目前还不清楚你在问什么.