Maison  >  Article  >  développement back-end  >  Comment puis-je accéder aux exceptions nommées en dehors des blocs « except » dans Python 3 ?

Comment puis-je accéder aux exceptions nommées en dehors des blocs « except » dans Python 3 ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 13:14:03857parcourir

How Can I Access Named Exceptions Outside of `except` Blocks in Python 3?

Accéder aux exceptions nommées au-delà des blocs except

Dans Python 3, tenter d'utiliser une exception nommée en dehors de son bloc except entraîne généralement une NameError ou UnboundLocalError. Contrairement à Python 2, les exceptions dans Python 3 font référence à leur trace, ce qui entraîne une limitation de portée dans la clause except.

Explication

L'instruction try restreint explicitement la portée de l’exception liée pour éviter les références circulaires et les fuites de mémoire potentielles. Lorsqu'une exception reçoit un nom en utilisant as, elle est effacée à la fin de la clause. Cela signifie que pour faire référence à l'exception par la suite, elle doit être liée à un nom différent.

Solutions de contournement

Puisque Python 3 clarifie la portée de l'exception, il existe deux principales approches pour accéder aux exceptions au-delà de leurs blocs except :

  1. Liaison à un nouveau nom : Au lieu d'attribuer l'exception à la même variable, liez-la à un nouveau nom avant quitter la clause except :

    <code class="python">try:
        raise Exception("Custom Error")
    except Exception as e:
        new_exc = e
    print(new_exc)</code>
  2. Effacer le traçage : Si l'exception n'est pas nécessaire, son traçage peut être explicitement effacé pour éviter les fuites de mémoire :

    <code class="python">try:
        raise Exception("Custom Error")
    except Exception as e:
        e.__traceback__ = None
    print(e)</code>

Contexte historique

Dans Python 2, les exceptions ne faisaient pas référence au traçage, ce qui rendait la limitation de portée inutile. En conséquence, ce comportement a changé dans Python 3 pour répondre aux fuites potentielles de ressources.

Attention

Lorsque vous associez des exceptions à un nouveau nom, il est crucial de se rappeler que le l'exception d'origine est effacée à la fin de la clause except. Réattribuer l'exception à elle-même (par exemple, exc = exc) ne créera pas de nouvelle liaison et entraînera une NameError.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn