Mensaje de excepción (Python 2.6)

En Python, si abro un archivo binario que no existe, el progtwig sale con un error y se imprime:

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

Puedo manejar esto con ‘try-except’, 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 capturada, imprimir la siguiente línea?

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

Así que el progtwig no saldría.

    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 desee capturar Excepción. Cuanto más estrecho pueda hacer su captura, mejor, en general. Así que es posible que desee probar:

     except IOError, e: 

    en lugar. También sobre el tema de reducir su manejo de excepciones, si solo le preocupa la pérdida de archivos, ponga el bash, excepto solo alrededor de la apertura:

     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 desea capturar el objeto de excepción pasado por la Excepción, es mejor comenzar a usar el NUEVO formato introducido en Python 2.6 (que actualmente admite ambos) porque será la única forma 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 

    Puede encontrar una descripción detallada en la documentación de Novedades en Python 2.6 .

    Python tiene el módulo de rastreo .

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

    Gracias por todo.

    Eso es, lo que necesitaba 🙂

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