web-dev-qa-db-fra.com

Comment quitter la fonction Python, lancer une instruction d'erreur sans quitter Python

Je suis nouveau à Python et je lutte avec la gestion des erreurs auto-définies. Lorsque mon code détecte l'erreur, je veux qu'il renvoie une erreur en police rouge et me ramène à Python terminal sans tuer Python.

Je suis tombé sur sys.exit () à la recherche d'une réponse, mais il quitte complètement Python. Connaissez-vous une alternative qui renvoie une erreur dans la police rouge ( et me ramène au terminal?

C'est ce que j'ai jusqu'à présent.

import sys
def do_something(parameter):
    if parameter > 100:
        # quit the function and any function(s) that may have called it
        sys.exit('Your parameter should not be greater than 100!')
    else:
        # otherwise, carry on with the rest of the code

Veuillez me faire savoir si je ne suis pas clair et je serai heureux de fournir plus de détails. Merci d'avance à tous!

15
Gyan Veda

Vous avez deux options (au moins).

Utilisation d'une instruction return:

def do_something(parameter):
    if parameter > 100:
        # display error message if necessary
        return  # 'exit' function and return to caller
    # rest of the code

Vous pouvez également return soemthing en renvoyant la valeur something à l'appelant. Cela peut être utilisé pour fournir un code d'état par exemple (par exemple 0: succès, 1: erreur).

Ou une meilleure approche consiste à raise une exception:

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)

Voir exceptions dans le manuel Python.

Il existe des classes d'exception intégrées (comme ValueError ci-dessus). Vous pouvez également définir le vôtre comme suit:

class ParameterError(Exception):
    pass

Vous pouvez également ajouter du code supplémentaire à vos classes d'exceptions personnalisées pour traiter les paramètres, afficher des messages d'erreur personnalisés, etc ...

Les exceptions intégrées sont répertoriées ici .

24
isedev

Définissez une exception personnalisée et augmentez-la.

class MyError(Exception):
    pass

...

if parameter > 100:
    # quit the function and any function(s) that may have called it
    raise MyError('Your parameter should not be greater than 100!')

(bien qu'en fait, maintenant j'y pense, vous pouvez simplement utiliser une exception intégrée: ValueError semble approprié).

0
Daniel Roseman