197 votes

Comment interrompre l'exécution d'un script Python ?

J'ai un simple Python script que je veux arrêter d'exécuter si une condition est remplie.

Par exemple :

done = True
if done:
    # quit/stop/exit
else:
    # do other stuff

Essentiellement, je cherche quelque chose qui se comporte de manière équivalente au mot-clé "return" dans le corps d'une fonction et qui permette au flux de code de quitter la fonction et de ne pas exécuter le code restant.

330voto

ryan_s Points 3076

Pour quitter un script, vous pouvez utiliser,

import sys
sys.exit()

Vous pouvez également fournir une valeur d'état de sortie, généralement un nombre entier.

import sys
sys.exit(0)

Sortir avec zéro, ce qui est généralement interprété comme un succès. Les codes non nuls sont généralement traités comme des erreurs. La valeur par défaut est de sortir avec zéro.

import sys
sys.exit("aa! errors!")

Imprime "aa ! erreurs !" et sort avec un code d'état de 1.

Il existe également une fonction _exit() dans le module os. Le site sys.exit() lève une exception SystemExit pour quitter le programme, afin que les instructions try et le code de nettoyage puissent s'exécuter. La version os._exit() ne fait pas cela. Elle termine simplement le programme sans faire de nettoyage ou vider les tampons de sortie, donc elle ne devrait pas être utilisée normalement.

El Documentation Python indiquer que os._exit() est la façon normale de terminer un processus enfant créé avec un appel à os.fork(), donc il a une utilité dans certaines circonstances.

1 votes

sys.stdout.flush() jumelé avec os._exit(0) était exactement ce dont j'avais besoin. Merci !

0 votes

Cela ne fonctionne pas sur mon python Anaconda. sys.exit() Traceback (dernier appel le plus récent) : Fichier "<ipython-input-26-86e3364fd793>", ligne 1, dans <module> sys.exit() AttributeError : L'objet 'System' ne possède pas d'attribut 'exit'.

1 votes

La version actuelle de Python 3.7.0 émet un avertissement lors de l'utilisation de l'option sys.exit(0) : SystemExit: 0 C:\Python37\lib\site-packages\IPython\core\interactiveshell.‌​py:2969: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1) . Est-ce que c'est correct ? Est-ce que cela apparaît seulement parce que j'utilise iPython ?

22voto

David Locke Points 4419

Vous pourriez mettre le corps de votre script dans une fonction et ensuite vous pourriez retourner de cette fonction.

def main():
  done = True
  if done:
    return
    # quit/stop/exit
  else:
    # do other stuff

if __name__ == "__main__":
  #Run as main program
  main()

20voto

gimel Points 30150
import sys
sys.exit()

19voto

efotinis Points 6338

Vous pouvez soit utiliser :

import sys
sys.exit(...)

o:

raise SystemExit(...)

Le paramètre optionnel peut être un code de sortie ou un message d'erreur. Les deux méthodes sont identiques. J'avais l'habitude de préférer sys.exit, mais j'ai récemment opté pour l'utilisation de SystemExit, parce qu'il semble mieux se démarquer du reste du code (grâce à l'attribut soulever mot-clé).

5voto

Sec Points 2786

Exit() devrait faire l'affaire

0 votes

Trois secondes plus vite que moi :P

4 votes

Et je l'ai même testé dans un shell avant :-)

0 votes

Bon sang, je ne l'ai pas vu/réagi à temps (je testais aussi dans l'interpréteur pour être sûr). secoue le poing ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X