Heim  >  Fragen und Antworten  >  Hauptteil

Fortschritt speichern, wenn Python abnormal beendet wird?

Problem:
Text lesen, um eine Liste zu erstellen. list.pop() während das Programm läuft. Jetzt möchte ich fragen, ob ich die Werte in der Liste beim abnormalen Beenden in den Text umschreiben kann.
Ausnahme:
Strg-c, töten, Strg-z
Danke!

黄舟黄舟2711 Tage vor1079

Antworte allen(3)Ich werde antworten

  • PHPz

    PHPz2017-05-18 10:55:50

    你说的这几种异常情况, 都是程序接收到相应信号, 采取默认动作(退出)导致的, 所以可以通过注册信号, 改变默认动作来避免程序异常退出.

    import signal
    import time
    
    def hander(signum, frame):
        # 接受到信号后你想做的事
        print signum, frame
    
    signal.signal(signal.SIGTERM, hander)  # 捕获kill : SIGTERM信号
    signal.signal(signal.SIGINT, hander)   # 捕获Ctrl-c: SIGTERM 信号(可以绑定不同的函数)
    signal.signal(signal.SIGTSTP, hander)  # 捕获 Ctrl-z: SIGTSTP信号(可以绑定不同的函数)
    while 1:
        time.sleep(1)

    经过上面的signal将对应的信号动作绑定到hander函数, 在接受到Ctrl-c , kill , Ctrl-z都能分别执行handler的代码了, 至于想怎么实现, 可以自定义, 如果除了这些信号意外的情况, 得示其他情况而决定采取什么措施! 可以学习下python signal相关的知识(有个别信号无法捕获, 这是系统决定的, 需要注意)

    Antwort
    0
  • ringa_lee

    ringa_lee2017-05-18 10:55:50

    可以尝试在if main里捕获异常:

    if __name__ == '__main__':
        try:
           main()
        except e:
           solve()

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-18 10:55:50

    python中有个函数叫atexit,它会在程序退出时进行回调,一般的退出都可以被捕获。

    Antwort
    0
  • StornierenAntwort