2009-01-15 16 views

Répondre

3

Impossible de penser à une autre façon de "sortir" d'une fonction autre que a) de retour, b) de lancer une exception, ou c) de terminer l'exécution du programme .

+0

La classe c) est une sous-classe de b): raise SystemExit – jfs

+0

Je parlais plutôt de terminer le processus (manuellement depuis l'extérieur du programme?). Bon point cependant. –

13

Si vous attrapez une exception et que vous voulez alors réémettre il, this pattern est assez simple:

try: 
    do_something_dangerous() 
except: 
    do_something_to_apologize() 
    raise 

Bien sûr, si vous voulez augmentation l'exception en premier lieu, c'est facile aussi:

def do_something_dangerous(self): 
    raise Exception("Boo!") 

Si ce n'est pas ce que vous vouliez, s'il vous plaît fournir plus d'informations!

3

L'exception se mettra fin à la fonction:

def f(): 
    a = 1/0 # will raise an exception 
    return a 

try: 
    f() 
except: 
    print 'no longer in f()' 
+0

Juste, on l'imagine certainement. Ce qui m'amène à me demander quelle est la question originale/vraiment/demandant ... –

2

En supposant que vous voulez à l'exécution « stop » à l'intérieur de cette méthode. Il y a quelques choses que tu peux faire.

  1. Ne pas intercepter l'exception. Cela retournera le contrôle à la méthode qui l'a appelé en premier lieu. Vous pouvez alors faire ce que vous voulez avec.
  2. sys.exit (0) Celui-ci quitte réellement le programme entier.
  3. retour Je sais que vous avez dit que vous ne voulez pas retourner, mais écoutez-moi. Le retour est utile, car basé sur la valeur que vous retournez, ce serait un bon moyen de faire savoir à vos utilisateurs ce qui n'a pas fonctionné.
1

Comme d'autres l'ont souligné, une exception vous sortira de la méthode. Vous ne devriez pas avoir honte ou être gêné par des exceptions; une exception indique une erreur , mais ce n'est pas nécessairement la même chose qu'un bug. Par exemple, disons que j'écris une fonction factorielle. Par exemple, par exemple, j'écris une fonction factorielle. Factoriel n'est pas définie pour les nombres négatifs, donc je pourrais le faire:

def factorial(n): 
    if n < 0: 
    raise ValueError 
    if n == 0: 
    return 1 
    return n*factorial(n-1) 

Je voudrais ensuite chercher l'exception:

n = raw_input('Enter a number.') 
try: 
    print factorial(n) 
except ValueError: 
    print 'You entered a negative number.' 

Je peux faire l'exception plus d'information qu'un ValueError en définissant mon propre:

class NegativeInputError(Exception): 
    pass 

# in the function: 
if n < 0: 
    raise NegativeInputError 

HTH!

Questions connexes