Contrôler les scripts avec des exceptions

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time


class StopWatching(Exception):
    pass


class RepeatWatching(Exception):
    pass


class ContinueWatching(Exception):
    time.sleep(5)


class Something():
    def __init__(self):
        print('start')
    def something(self):
        is_continue = False
        while True:
            try:
                if is_continue:
                    raise KeyboardInterrupt
                time.sleep(5)
            except KeyboardInterrupt:
                try:
                    self.option_controller()
                except StopWatching:
                    break
                except RepeatWatching:
                    print('repeat!')
                    is_continue = False
                except ContinueWatching:
                    print('to be continued...')
                    is_continue = True

    def option_controller(self):
        cmd = input('\n S: stop\n R: repeat\n C: continue\nOption: ')

        def stop_watching():
            raise StopWatching

        def repeat_watching():
            raise RepeatWatching

        def continue_watching():
            raise ContinueWatching()
        option = {'s': stop_watching,
                  'r': repeat_watching,
                  'c': continue_watching
                  }
        try:
            if cmd is None or cmd not in option:
                cmd = 'c'
            option[cmd.lower()]()
        except (StopWatching, RepeatWatching, ContinueWatching) as e:
            raise e


if __name__ == '__main__':
    s = Something()
    s.something()

Recommended Posts

Contrôler les scripts avec des exceptions
Contrôler le libellé des erreurs avec nginx
Contrôlez plusieurs robots avec jupyter-lab
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Commande de servomoteur avec Raspberry Pi
Exécutez le script avec la commande admin de Django
Essayez la simulation de contrôle de fréquence avec Python
Observez le contrôle de congestion TCP avec ns-3
[Tkinter] Contrôler les threads avec l'objet Event
Pendule inversé avec contrôle prédictif du modèle
[systemd] Contrôlez le ventilateur du GPU de Nvidia avec rc.local
Rendre le serveur de contrôle PLEN compatible avec ViVi PLEN2
Réception de la télécommande infrarouge avec Intel Edison
[ev3dev × Python] Contrôle SSH (opération à distance avec clavier)
Créez une image diabolique avec le script de Blender