validar try tipos sirve que por pass para imprimir excepciones error ejemplos diferentes anidados python error-handling custom-exceptions

try - Excepciones de Python personalizadas con códigos de error y mensajes de error



try except anidados python (1)

class AppError(Exception): pass class MissingInputError(AppError): pass class ValidationError(AppError): pass

...

def validate(self): """ Validate Input and save it """ params = self.__params if ''key'' in params: self.__validateKey(escape(params[''key''][0])) else: raise MissingInputError if ''svc'' in params: self.__validateService(escape(params[''svc''][0])) else: raise MissingInputError if ''dt'' in params: self.__validateDate(escape(params[''dt''][0])) else: raise MissingInputError def __validateMulti(self, m): """ Validate Multiple Days Request""" if m not in Input.__validDays: raise ValidationError self.__dCast = int(m)

validate () y __validateMulti () son métodos de una clase que valida y almacena los parámetros de entrada pasados. Como es evidente en el código, elevo algunas excepciones personalizadas cuando falta algún parámetro de entrada o falla alguna validación.

Me gustaría definir algunos códigos de error personalizados y mensajes de error específicos de mi aplicación como,

Error 1100: "Parámetro clave no encontrado. Verifique su entrada".

Error 1101: "Parámetro de fecha no encontrado. Verifique su entrada"

...

Error 2100: "El parámetro Día Múltiple no es válido. Los valores aceptados son 2, 5 y 7".

e informar lo mismo al usuario.

  1. ¿Cómo defino estos códigos de error y mensajes de error en las excepciones personalizadas?
  2. ¿Cómo elevo / atrapo la excepción de forma que sé qué código / mensaje de error mostrar?

(PD: Esto es para Python 2.4.3).

Bastien Léonard menciona en este comentario SO que usted no necesita definir siempre un nuevo __init__ o __str__ ; de forma predeterminada, los argumentos se colocarán en self.args y se imprimirán con __str__ .

Por lo tanto, la solución que prefiero:

class AppError(Exception): pass class MissingInputError(AppError): # define the error codes & messages here em = {1101: "Some error here. Please verify.", / 1102: "Another here. Please verify.", / 1103: "One more here. Please verify.", / 1104: "That was idiotic. Please verify."}

Uso:

try: # do something here that calls # raise MissingInputError(1101) except MissingInputError, e print "%d: %s" % (e.args[0], e.em[e.args[0]])


Aquí hay un ejemplo rápido para escribir una clase Exception personalizada con códigos especiales ...

class ErrorWithCode(Exception): def __init__(self, code): self.code = code def __str__(self): return repr(self.code) try: raise ErrorWithCode(1000) except ErrorWithCode as e: print "Received error with code:", e.code

Editar Como estabas preguntando sobre cómo usar args aquí hay un ejemplo adicional ...

class ErrorWithArgs(Exception): def __init__(self, *args): # *args is used to get a list of the parameters passed in self.args = [a for a in args] try: raise ErrorWithArgs(1, "text", "some more text") except ErrorWithArgs as e: print "%d: %s - %s" % (e.args[0], e.args[1], e.args[2])