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

Susan Sarandon
Libérer: 2024-10-30 13:14:03
original
860 Les gens l'ont consulté

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>
    Copier après la connexion
  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>
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!