2017-07-13 2 views
0

SO pour mon projet en python, je prends deux entrées dites & b comme valeurs entières. Maintenant, le code va comme:Terminez correctement le script sans message d'erreur dans Spyder

import sys 
a = input("enter a") 
b = input("enter b") 
if a < b: 
    print(" enter a greater than b and try again") 
    sys.exit() 

# Rest of the code is here 

Maintenant, cela fonctionne très bien. Mais crée une instruction supplémentaire

An exception has occurred, use %tb to see the full traceback. 

SystemExit 

Et je ne le veux pas car l'utilisateur peut penser que le fonctionnement du code n'est pas correct. Donc est-il possible que cette instruction ne soit pas montrée ou toute autre fonction qui sortirait du code sans imprimer autre chose que la ligne que j'ai écrite?

NOTE J'ai essayé exit() mais il continue à exécuter le code en dessous. En outre, j'ai noté this related question mais les approches énumérées là ne fonctionnent pas dans ce cas.

EDIT: J'ajoute un peu plus d'informations. J'ai besoin de mettre cette fonction de sortie dans une fonction définie par l'utilisateur afin que chaque fois que l'utilisateur entre des données erronées, le code appellera cette fonction définie par l'utilisateur et quittera le code. Si je tente de mettre mon code dans une instruction if autre comme

def end(): 
    print("incorrect input try again") 
    os.exit() 

a = input("enter data") 
if a < 10: 
    end() 
b = input ("enter data") 
if b < 20: 
    end() 
# more code here 

Je ne sais pas pourquoi mais je ne peux même définir cette fonction définie par l'utilisateur à la fin car elle soulève l'erreur de la fonction non définie fin(). J'utilise Python avec Spyder sur Windows.

+0

Désolé, je pensais que je l'avais résolu ce problème, mais malheureusement je n'avais pas. Alors s'il vous plaît aidez !! –

+0

@moooeeeep Actuellement, j'utilise Spyder pour coder sur Windows et je n'en ai pas dans mon code. –

+0

Ensuite, cela semble pertinent: https://stackoverflow.com/q/25928377/1025391 (Bien que peut-être un peu désuet car le comportement est légèrement différent apparemment) Vous feriez mieux de déclarer ces informations directement dans votre question. – moooeeeep

Répondre

0

Vous pouvez utiliser os._exit()

a = int(input("enter a")) 
b = int(input("enter b")) 
if a < b: 
    print(" enter a greater than b and try again") 
    os._exit(0) 
+0

il n'y a pas d'attribut exit() dans os. –

+0

@AmbikaSaxena vérifier l'édition –

+1

Merci cela a bien fonctionné sans aucun avertissement même !! :) –

1

Cela semble fonctionner très bien:

import sys 

def end(): 
    print("incorrect input try again") 
    sys.exit(1) 

a = input("enter data") 
if int(a) < 10: 
    end() 
b = input ("enter data") 
if int(b) < 20: 
    end() 

J'ai utilisé le sys.exit et fixe vos conditions pour éviter la chaîne avec la comparaison des nombres entiers. Je ne peux pas voir de messages supplémentaires dans la sortie. Seulement ceci:

>py -3 test2.py 
enter data1 
incorrect input try again 
> 

S'il vous plaît prendre également l'avis de ce qoute de docs python:

La méthode standard pour la sortie est sys.exit (n). [os] _exit() ne devrait normalement être utilisé que dans le processus fils après un fork().

Il fonctionne également dans le repl

+0

Si le code est exécuté pour la première fois, il affiche 'C: \ Utilisateurs \ abc \ Anaconda \ lib \ paquets-de-site \ IPython \ core \ interactiveshell.py: 2889: UserWarning: Pour quitter: utilisez 'exit' , "quitter" ou Ctrl-D. warn ("Pour quitter: utilisez 'exit', 'quit' ou Ctrl-D.", Stacklevel = 1) Une exception est survenue, utilisez% tb pour voir le retraçage complet. SystemExit' et si sur la même console si j'exécute à nouveau le code, il n'affiche pas l'avertissement mais montre ceci: 'Une exception s'est produite, utilisez% tb pour voir le retraçage complet. SystemExit'. Je ne veux pas afficher ces messages. –

+0

Le code se ferme correctement mais donne des instructions supplémentaires que je n'ai pas besoin d'imprimer. –