2017-10-19 7 views
0

Je suis nouveau sur Python et j'essaye d'utiliser la fonction exit de sys, mais de toute façon cela ne fonctionne pas sur mon ordinateur. Ceci est mon code:Fonction de sortie en python ne fonctionne pas

from sys import exit 

userResponse = input ("n or y?") 
if not (userResponse =="n" or userResponse =="y") : 
exit ("ERROR") 
+0

yes ("Une exception est survenue, utilisez% tb pour voir le retraçage complet SystemExit: ERROR") – jooj

+0

ce code n'est même pas valide, corrigez-le. – norok2

+0

Quelle version de Python et comment exécutez-vous le code? –

Répondre

1

Vous devez indenter correctement:

if not (userResponse =="n" or userResponse =="y") : 
    exit('Error') 

Vous pouvez également soulever une exception pour obtenir un message d'erreur encore plus descriptif:

userResponse = input ("n or y?") 
if not (userResponse =="n" or userResponse =="y") : 
    raise ValueError('Does not work') 
+0

mais j'ai besoin d'écrire un massage d'erreur! – jooj

+0

Étendu ma réponse. – mrCarnivore

+0

J'ai essayé d'écrire 'exit ("ERROR")' dans mon terminal python et ça a bien fonctionné. Quand doit-il être un entier? (Je pense aussi laisser vide travaillerait) –

0

Faisant suite à @MrCarnivore ...

from sys import exit 

userResponse = raw_input("n or y?") 
if not (userResponse =="n" or userResponse =="y"): 
    print('Error Message Here') 
    exit(1) 
+0

i obtenir ce massage d'erreur: (Erreur Une exception a eu lieu, utilisez% tb pour voir la pleine retraçage SystemExit:. 1 /Users/juhina/anaconda/lib/python3.6/site-packages/IPython/ core/interactiveshell.py: 2889: UserWarning: Pour quitter: utilisez 'exit', 'quit' ou Ctrl-D warn ("Pour quitter: utilisez 'exit', 'quit' ou Ctrl-D.", stacklevel = 1) – jooj

+0

Quand la sortie nécessite un entier? Sur ma console interactive, 2.7, ça marche bien avec "exit ('MESSAGE')" –

+0

@cer: "" "exit (...) exit ([status] Quitter l'interpréteur en élevant SystemExit (état) Si le statut est omis ou Aucun, il est par défaut égal à zéro (c.-à-d. Succès).Si le statut est un nombre entier, il sera utilisé comme statut de sortie du système. S'il s'agit d'un autre type d'objet, il sera imprimé et l'état de sortie du système sera ("échec"). "" "- Le passage d'un message est parfaitement légal, ainsi que l'impression d'erreurs sur 'sys.stderr',' sys.stdout' est pour les sorties normales du programme –

1

Exi t soulève une exception SystemExit; c'est comme ça que ça termine le programme. Que votre environnement affiche cette exception après la fin n'est pas un bogue, il vous montre simplement la cause. Je suis d'accord avec vous (comme le fait, par exemple, this PEP), que le comportement par défaut devrait être de pas imprimer un message de retraçage pour cette exception, et pour KeyboardException

Mais à la fin, l'exécution arrêtai, comme a été conçu pour faire.

Voir la documentation pour plus de détails: https://docs.python.org/2/library/sys.html#sys.exit


Quelques réponses ici d'abord indiqué que vous ne pouvez pas passer une chaîne à exit. C'est faux: des docs (emphase mienne)

L'argument optionnel arg peut être un entier donnant l'état de sortie (par défaut à zéro), ou un autre type d'objet. S'il s'agit d'un nombre entier, zéro est considéré comme une "terminaison réussie" et toute valeur non nulle est considérée comme une "terminaison anormale" par des coquilles et similaires. La plupart des systèmes requièrent qu'il soit compris entre 0 et 127 et produisent des résultats indéfinis sinon ... Si un autre type d'objet est passé, None équivaut à passer à zéro, et tout autre objet est imprimé dans stderr et entraîne une sortie code de 1. En particulier, sys.exit ("un message d'erreur") est un moyen rapide de quitter un programme lorsqu'une erreur se produit.


La fonction exit builtin fait la même chose. En général, il n'est pas génial d'ombrer la fonction intégrée en important à partir d'un module, bien que dans ce cas, cela n'a pas d'importance. Style recommandé serait

import sys 
sys.exit("My exception") 

Si cela vous semble unintuitive, vous pouvez contourner la gestion des exceptions à l'aide os._exit. Ne pas les faire sans raison