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

当我按 Ctrl-C 时,我看到“信号”和“除外”并且程序没有退出。
  • 显然到达sys.exit(0)时,为什么程序没有退出?
  • 为什么程序流程没有到达KeyboardInterrupt 部分?
  • 什么是让 Ctrl-C 工作并且在不同地方分别处理每个 except: 案例而不退出的简洁方法?
  • 最佳答案

    程序不会退出,因为 sys.exit 是通过抛出 SystemExit 异常来工作的,并且您的整体 except 捕获了它。
    except KeyboardInterrupt不会触发,因为您安装的SIGINT处理程序会覆盖默认的SIGINT处理程序,并且当您按下Ctrl-C时,默认的SIGINT处理程序负责引发KeyboardInterrupt

    至于你的第三个问题,不清楚你问的是什么。

    关于python - Python 中的 SIGINT 和异常处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36514336/

    10-11 23:55