Manière correcte de la gestion des exceptions en Python?

J'ai cherché pour d'autres postes, comme je l'ai senti c'est plutôt un problème commun, mais tous les autres Python exception des questions que j'ai trouvé n'ont pas tenu compte de mon problème.

Je vais essayer d'être la plus précise ici que je peux, alors je vais donner un exemple direct. Et pleeeeease ne postez pas de solution de contournement pour ce problème spécifique. Je ne suis pas spécialement intéressé comment vous pouvez envoyer un e-mail beaucoup plus agréable avec xyz.
Je veux savoir comment vous traitent généralement des dépendants, des erreurs de déclarations.

Ma question est, comment gérer les exceptions bien, ceux qui dépendent l'un de l'autre, sens:
Seulement si la première étape a été un succès, essayez la prochaine, et ainsi de suite. Un plus le critère est: Toutes les exceptions doivent être prises, ce code doit être robuste.

Pour votre considération, par exemple:

try:
    server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
    #actually it can throw a lot more, this is just an example
    pass
else: #only if no exception was thrown we may continue
    try:
        server.login(username, password)
    except SMTPAuthenticationError:
        pass # do some stuff here
    finally:
        #we can only run this when the first try...except was successful
        #else this throws an exception itself!
        server.quit() 
    else:
        try:
            # this is already the 3rd nested try...except
            # for such a simple procedure! horrible
            server.sendmail(addr, [to], msg.as_string())
            return True
        except Exception:
            return False
        finally:
            server.quit()

return False

Ce qui semble extrêmement unpythonic pour moi, et le code de gestion d'erreur est le triple de la véritable code de commerce, mais d'un autre côté comment puis-je gérer plusieurs déclarations qui sont dépendants l'un de l'autre, la signification ci statement1 est indispensable pour statement2 et ainsi de suite?

Je suis également intéressé par les ressources appropriée de nettoyage, même Python peut gérer que pour lui-même.

Merci, Tom

  • merci pour l'édition dbr, mais merci de ne pas modifier les choses que vous ne savez pas à propos de vous-même. J'ai édité le dos des critères critère, qui est en effet le singulier, comme un pluriel n'a pas de sens, où que vous l'avez édité.
  • Opps, désolé à ce sujet (hm, ne pense pas que je ai jamais entendu parler au singulier de critères avant..)
InformationsquelleAutor Tom | 2009-06-12