2009-11-11 20 views
35

En Python, si abro un archivo binario que no existe, el programa sale con un error y grabados:Mensaje de excepción (Python 2.6)

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' 

puedo manejar esto con 'try-excepto' , como:

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

¿Cómo podría, en Excepción atrapada, imprimir la siguiente línea?

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

Así que el programa no saldrá.

Respuesta

91

Esto imprime el mensaje de excepción:

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

Esto mostrará todo el rastreo:

import traceback 

# ... 

except Exception, e: 
    traceback.print_exc() 

pero es posible que no quieren coger Excepción. Mientras más angosta puedas hacer tu captura, mejor, en general. Por lo que es posible que desee probar:

except IOError, e: 

en su lugar. También sobre el tema de la reducción de su manejo de excepciones, si sólo está preocupado por los archivos que faltan, a continuación, poner el try-excepto sólo en torno a la intemperie:

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() 
+0

Esto no funcionó para mí. La respuesta de Jochen sí. – Josh

+0

@Josh That answers dice casi lo mismo que este. –

9

Python tiene el módulo traceback.

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

Gracias por todos.

Eso es, lo que necesitaba :)

import traceback 

try: 
    # boom 
except Exception: 
    print traceback.format_exc() 
+8

No debe crear una respuesta cuando está haciendo un comentario. ¡Acepta una de las respuestas para recompensar a tus ayudantes! –

+0

Tómese el tiempo para echar un vistazo a la respuesta de Ned B. Hay varios puntos importantes que él hace, más allá de solo resolver su problema inmediato. – PaulMcG

+0

Gracias, Paul, pero tengo la sensación de que hemos llegado al final de la actividad en esta pregunta ... –

22

Si desea capturar el objeto de excepción aprobada por la excepción, lo mejor es empezar a utilizar el nuevo formato introducido en Python 2.6 (que actualmente es compatible con ambos), porque será la única manera de hacerlo en Python 3.

Y eso es:

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

Ejemplo:

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

Se puede encontrar una descripción detallada en What's New in Python 2.6 documentation.

+2

Útil, pero esto no respondió la pregunta. ¿Tal vez mejor como un comentario? – Josh