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.
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()
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 .
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()
Merci pour tout.
Voilà, ce dont j'avais besoin :)
import traceback
try:
# boom
except Exception:
print traceback.format_exc()