tutorial poner español código como comentarios comentar python exception-handling with-statement

poner - python español



Vuelva a asignar la excepción desde dentro de un bloque python__exit__ (1)

El procedimiento adecuado es generar la nueva excepción dentro del controlador __exit__ .

Sin embargo, no debería plantear la excepción que se aprobó; para permitir el encadenamiento de gestor de contexto, en ese caso solo debe devolver un valor de falsey del controlador. Sin embargo, elevar tus propias excepciones está perfectamente bien.

Tenga en cuenta que es mejor usar la prueba de identidad para verificar el tipo de excepción pasada:

def __exit__(self, ex_type, ex_val, tb): if ex_type is VagueThirdPartyError: if ex_val.args[0] == ''foobar'': raise SpecificException(''Foobarred!'') # Not raising a new exception, but surpressing the current one: if ex_val.args[0] == ''eggs-and-ham'': # ignore this exception return True if ex_val.args[0] == ''baz'': # re-raise this exception return False # No else required, the function exits and `None` is returned

También podría usar issubclass(ex_type, VagueThirdPartyError) para permitir subclases de la excepción específica.

Desde dentro de un bloque __exit__ en una clase de cursor personalizada, quiero capturar una excepción para poder lanzar una excepción más específica. ¿Cuál es la forma apropiada de hacer esto?

class Cursor: def __enter__(self): ... def __exit__(self, ex_type, ex_val, tb): if ex_type == VagueThirdPartyError: # get new more specific error based on error code in ex_val and # return that one in its place. return False # ? else: return False

Elevar la excepción específica dentro del bloque __exit__ parece un truco, pero tal vez ya lo estoy pensando.