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.