try print pass exceptions error else custom catch all python exception logging except

print - try else python



captura de mensajes de excepción de Python (9)

import ftplib import urllib2 import os import logging logger = logging.getLogger(''ftpuploader'') hdlr = logging.FileHandler(''ftplog.log'') formatter = logging.Formatter(''%(asctime)s %(levelname)s %(message)s'') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.INFO) FTPADDR = "some ftp address" def upload_to_ftp(con, filepath): try: f = open(filepath,''rb'') # file to send con.storbinary(''STOR ''+ filepath, f) # Send the file f.close() # Close file and FTP logger.info(''File successfully uploaded to ''+ FTPADDR) except, e: logger.error(''Failed to upload to ftp: ''+ str(e))

Esto no parece funcionar, me sale un error de sintaxis, ¿cuál es la forma correcta de hacerlo para registrar todo tipo de excepciones en un archivo?


Actualizar esto a algo más simple para el registrador (funciona tanto para Python 2 como para 3). No necesitas el módulo de rastreo.

import logging logger = logging.Logger(''catch_all'') def catchEverythingInLog(): try: ... do something ... except Exception as e: logger.error(e, exc_info=True) ... exception handling ...

Esta es ahora la forma antigua (aunque todavía funciona):

import sys, traceback def catchEverything(): try: ... some operation(s) ... except: exc_type, exc_value, exc_traceback = sys.exc_info() ... exception handling ...

exc_value es el mensaje de error.



Hay algunos casos en los que puede utilizar el mensaje de correo electrónico o los mensajes de correo electrónico ... Pero no funciona en todos los casos. De todos modos lo más seguro es usar el str (e).

try: ... except Exception as e: print(e.message)


La sintaxis ya no se admite en Python 3. En su lugar, utilice la siguiente.

try: do_something() except BaseException as e: logger.error(''Failed to do something: '' + str(e))


Puede intentar especificar el tipo BaseException explícitamente. Sin embargo, esto solo capturará los derivados de BaseException. Si bien esto incluye todas las excepciones proporcionadas por la implementación, también es posible que se generen clases arbitrarias de estilo antiguo.

try: do_something() except BaseException, e: logger.error(''Failed to do something: '' + str(e))


Puede usar logger.exception("msg") para registrar una excepción con el rastreo:

try: #your code except Exception as e: logger.exception(''Failed: '' + str(e))


Si desea clase de error, mensaje de error y seguimiento de pila (o cualquiera de ellos), use sys.exec_info() .

Código de trabajo mínimo con algún formato,

import sys import traceback try: ans = 1/0 except BaseException as ex: # Get current system exception ex_type, ex_value, ex_traceback = sys.exc_info() # Extract unformatter stack traces as tuples trace_back = traceback.extract_tb(ex_traceback) # Format stacktrace stack_trace = list() for trace in trace_back: stack_trace.append("File : %s , Line : %d, Func.Name : %s, Message : %s" % (trace[0], trace[1], trace[2], trace[3])) print("Exception type : %s " % ex_type.__name__) print("Exception message : %s" %ex_value) print("Stack trace : %s" %stack_trace)

Lo que dará salida siguiente salida,

Exception type : ZeroDivisionError Exception message : division by zero Stack trace : [''File : .//test.py , Line : 5, Func.Name : <module>, Message : ans = 1/0'']

sys.exec_info()

Esto le da los detalles de excepción sobre la excepción más reciente. Se devuelve una tupla. Los siguientes son los valores de la tupla (type, value, traceback) .

traceback es una instancia del objeto traceback. Puede formatear la traza con los métodos proporcionados. Más se puede encontrar en la documentación de rastreo


Tienes que definir qué tipo de excepción quieres atrapar. Entonces escriba except Exception, e: lugar de except, e: para una excepción general (que se registrará de todos modos).

Otra posibilidad es escribir todo tu código try / except de esta manera:

try: with open(filepath,''rb'') as f: con.storbinary(''STOR ''+ filepath, f) logger.info(''File successfully uploaded to ''+ FTPADDR) except Exception, e: logger.error(''Failed to upload to ftp: ''+ str(e))

en Python 3.xy las versiones modernas de Python 2.x usan except Exception as e lugar de except Exception, e :

try: with open(filepath,''rb'') as f: con.storbinary(''STOR ''+ filepath, f) logger.info(''File successfully uploaded to ''+ FTPADDR) except Exception as e: logger.error(''Failed to upload to ftp: ''+ str(e))


Utilice str (ex) para imprimir execption

try: #your code except ex: print(str(ex))