web-dev-qa-db-fra.com

Message d'exception (Python 2.6)

En Python, si j'ouvre un fichier binaire qui n'existe pas, le programme se termine avec une erreur et affiche:

Traceback (most recent call last):
  File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
  line 4, in <module>
  pkl_file = open('monitor.dat', 'rb')
  IOError: [Errno 2] No such file or directory: 'monitor.dat'

Je peux gérer cela avec 'try-except', comme:

try:
    pkl_file = open('monitor.dat', 'rb')
    monitoring_pickle = pickle.load(pkl_file)
    pkl_file.close()
except Exception:
    print 'No such file or directory'

Comment pourrais-je, dans une exception interceptée, imprimer la ligne suivante?

File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
line 11, in <module>
pkl_file = open('monitor.dat', 'rb')

Donc, le programme ne se terminait pas.

35
turbojupi

Ceci imprime le message d'exception:

except Exception, e:
    print "Couldn't do it: %s" % e

Cela montrera le traçage entier:

import traceback

# ...

except Exception, e:
    traceback.print_exc()

Mais vous ne voudrez peut-être pas attraper Exception. Le plus étroit vous pouvez faire votre prise, le mieux, en général. Vous pouvez donc essayer:

except IOError, e:

au lieu. Également sur le sujet de la réduction de la gestion des exceptions, si vous ne vous souciez que des fichiers manquants, mettez le try-except uniquement en plein air:

try:
    pkl_file = open('monitor.dat', 'rb')
except IOError, e:
    print 'No such file or directory: %s' % e

monitoring_pickle = pickle.load(pkl_file)
pkl_file.close()
90
Ned Batchelder

Si vous souhaitez capturer l'objet d'exception transmis par l'exception, il est préférable de commencer à utiliser le nouveau format introduit dans Python 2.6 (qui prend actuellement en charge les deux), car ce sera le seul moyen de le faire dans Python 3.

Et c'est:

try:
    ...
except IOError as e:
    ...

Exemple:

try:
    pkfile = open('monitor.dat', 'rb')
except IOError as e:
    print 'Exception error is: %s' % e

Un aperçu détaillé peut être trouvé sur le Quoi de neuf dans Python 2.6 .

22
jathanism

Python a le module traceback .

import traceback
try:
    pkl_file = open('monitor.dat', 'rb')
    monitoring_pickle = pickle.load(pkl_file)
    pkl_file.close()
except IOError:
    traceback.print_exc()
9
Jochen Ritzel

Merci pour tout.

Voilà, ce dont j'avais besoin :)

import traceback

try:
    # boom
except Exception:
    print traceback.format_exc()
6
turbojupi