web-dev-qa-db-fra.com

Comment imprimer une exception dans Python 3?

À l'heure actuelle, j'intercepte l'exception dans la clause except Exception: et fais print(exception). Le résultat ne fournit aucune information puisqu'il imprime toujours <class 'Exception'>. Je savais que cela fonctionnait dans python 2, mais comment puis-je le faire dans python3?

37
Haonan Chen

Je suppose que vous devez affecter la Exception à une variable. Comme indiqué dans le tutoriel Python :

def fails():
    x = 1 / 0

try:
    fails()
except Exception as ex:
    print(ex)

Pour donner une brève explication, as est un mot clé de pseudo-affectation utilisé dans certaines instructions composées pour affecter ou aliaser l'instruction précédente à une variable.

Dans ce cas, as affecte l’exception interceptée à une variable permettant d’obtenir des informations sur l’exception stockée et utilisée ultérieurement, au lieu de nécessiter un traitement immédiat. (Ceci est discuté en détail dans Référence du langage Python 3: The try Statement .)


L'autre instruction composée utilisant as est l'instruction with:

@contextmanager
def opening(filename):
    f = open(filename)
    try:
        yield f
    finally:
        f.close()

with opening(filename) as f:
    # ...read data from f...

Ici, les instructions with sont utilisées pour encapsuler l'exécution d'un bloc avec des méthodes définies par gestionnaires de contexte . Cela fonctionne comme une instruction étendue try...except...finally dans un package générateur soigné, et l'instruction as attribue le résultat généré par le générateur à partir du gestionnaire de contexte à une variable pour une utilisation étendue. (Ceci est discuté en détail dans Référence du langage Python 3: The with Statement .)


Enfin, as peut être utilisé lors de l'importation de modules pour aliaser un module sous un nom différent (généralement plus court):

import foo.bar.baz as fbb

Ceci est discuté en détail dans Référence du langage Python 3: The import Statement .

69
Noah Bogart

Voici les changements depuis python 2:

    try:
        1 / 0
    except Exception as e: # (as opposed to except Exception, e:)
                           # ^ that will just look for two classes, Exception and e
        # for the repr
        print(repr(e))
        # for just the message, or str(e), since print calls str under the hood
        print(e)
        # the arguments that the exception has been called with. 
        # the first one is usually the message. (OSError is different, though)
        print(e.args)

Vous pouvez regarder dans le module de bibliothèque standard traceback pour des choses plus sophistiquées.

24
rigel

Essayer

except Exception as e:
    print(e)
9
wpercy