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!
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 .
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é).