Pour l'option "q" (quitter) dans le menu de mon programme, j'ai le code suivant:
Elif choice == "q":
print()
Cela a bien fonctionné jusqu'à ce que je le mette dans une boucle infinie, ce qui a gardé l'impression de lignes vierges. Y at-il une méthode qui peut quitter le programme? Sinon, pouvez-vous penser à une autre solution?
Une façon est de faire:
sys.exit(0)
Vous devrez bien sûr import sys
.
Une autre façon consiste à break
sortir de votre boucle infinie. Par exemple, vous pouvez faire ceci:
while True:
choice = get_input()
if choice == "a":
# do something
Elif choice == "q":
break
Une autre méthode consiste à placer votre boucle principale dans une fonction et à utiliser return
:
def run():
while True:
choice = get_input()
if choice == "a":
# do something
Elif choice == "q":
return
if __== "__main__":
run()
La seule raison pour laquelle vous avez besoin de la fonction run()
lorsque vous utilisez return
est que (contrairement à d'autres langues), vous ne pouvez pas directement utiliser return
de la partie principale de votre Python (la partie qui ne fait pas partie d’une fonction).
La façon réelle de terminer un programme, est d'appeler
raise SystemExit
C'est ce que sys.exit
fait quand même .
Un simple SystemExit
, ou avec None
comme argument unique, définit le code de sortie du processus à zéro. Toute valeur d'exception non entière (raise SystemExit("some message")
) affiche la valeur de l'exception sur sys.stderr
Et définit le code de sortie sur 1. Une valeur entière définit le code de sortie du processus sur la valeur suivante:
$ python -c "raise SystemExit(4)"; echo $?
4
Dans Python 3, il existe une fonction exit()
:
Elif choice == "q":
exit()
Voir sys.exit
. Cette fonction quittera votre programme avec le statut de sortie donné.
Veuillez noter que les solutions basées sur sys.exit () ou toute exception peuvent ne pas fonctionner dans un environnement multithread.
Puisque exit () finalement "seulement" lève une exception, il ne sortira du processus que s'il est appelé depuis le thread principal et l'exception ne sera pas interceptée. ( doc )
Cette réponse de Alex Martelli pour plus de détails.