À 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?
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 .
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.
Essayer
except Exception as e:
print(e)