He buscado otras publicaciones, ya que considero que este es un problema bastante común, pero todas las demás preguntas de excepción de Python que he encontrado no reflejan mi problema.¿Manera correcta de manejar excepciones en Python?
Trataré de ser tan específico aquí como pueda, así que daré un ejemplo directo. Y por favor, no publique ninguna solución para este problema específico. No estoy interesado específicamente en cómo puede enviar un correo electrónico mucho mejor con xyz. Quiero saber cómo generalmente se ocupa de las declaraciones dependientes propensas a errores.
Mi pregunta es cómo manejar bien las excepciones, unas que dependen unas de otras, es decir: Solo si el primer paso fue exitoso, intente con el siguiente, y así sucesivamente. Un criterio más es: todas las excepciones deben ser atrapadas, este código tiene que ser robusto.
Para su consideración, un ejemplo:
try:
server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
#actually it can throw a lot more, this is just an example
pass
else: #only if no exception was thrown we may continue
try:
server.login(username, password)
except SMTPAuthenticationError:
pass # do some stuff here
finally:
#we can only run this when the first try...except was successful
#else this throws an exception itself!
server.quit()
else:
try:
# this is already the 3rd nested try...except
# for such a simple procedure! horrible
server.sendmail(addr, [to], msg.as_string())
return True
except Exception:
return False
finally:
server.quit()
return False
Esto se ve muy unpythonic a mí, y el código de control de errores es el triple del código de negocio real, pero, por otra parte, ¿cómo puedo manejar varias declaraciones que son Depende de los otros, lo que significa que la declaración1 es un requisito previo para la declaración2 y así sucesivamente.
También estoy interesado en la limpieza adecuada de los recursos, incluso Python puede hacerlo por sí mismo.
Gracias, Tom
gracias por editar dbr, pero por favor no edite cosas de las que no esté seguro. Modifiqué los criterios hacia el criterio, que de hecho es el singular, ya que un plural no tiene sentido donde lo editó. – Tom
Opps, perdón por eso (hm, no creo que haya escuchado el singular criterio antes ...) – dbr