¿Cuándo usa cada uno? Creo que estoy usando mucho más que excepciones. Parece que estoy atrapando las excepciones usando mis "ifs", incluso antes de que los obtenga. Hay todo en mi código.¿Cuándo debe verificar los errores usando "si" y cuándo debe usar las excepciones?
Respuesta
declaraciones intento de captura están diseñados para controlar los errores graves y en particular para la conexión a un servicio externo, como un servicio web, bases de datos, etc. Solicitud web y donde se espera que los errores y a suceder de vez en cuando. Es más pesado en el entorno de tiempo de ejecución manejar una excepción, que escribir un buen código y utilizar las características del lenguaje dado tales como if o operación ternaria.
capturas try no son la primera línea de defensa, que son la última línea de defensa usando prácticas de codificación.
Especialmente en lo que se trabaja con aplicaciones de gran tamaño, manejo de excepciones es realmente una mejor práctica. Como mencionaste, recibes muchas declaraciones de if. Con python, el uso de las instrucciones try/except le permite crear una forma más estandarizada de tratar con las excepciones. Con excepciones, obtendrá el beneficio de ver el tipo de clase de excepción, así como cualquier otra clase personalizada que cree. Simplemente te da una forma mucho más estructurada de codificación.
EAFP: Easier to ask for forgiveness than permission.
Es estilo común de codificación de Python para suponer la existencia de llaves o atributos válidos y capturar excepciones si el supuesto de prueba falsa.
Esto contrasta con el estilo LBYL (Look before you leap) común a muchos otros lenguajes como C
Actualización 1
Por supuesto, debe asegurarse de que manejar cualquier excepción atrapados y no sólo en silencio ignorarlos de lo contrario, perderás mucho tiempo depurando. pass
¡probablemente no es lo que estás buscando!
Actualización 2
Usted debe coger el excepciones específicas que son esperando a ser raise
-d, si son built-in exceptions o de otra manera.
Puse el intento genérico: excepto Exceptione,: print e pass ¿Eso es OK? – TIMEX
@TIMEX: no hay una respuesta genérica aquí. La forma en que maneje la excepción depende del procesamiento que estaba haciendo cuando fue 'raise' -d. ¡Ese 'pase' dicho es muy raramente lo que quieres! – Johnsyweb
Vale la pena señalar que el uso de la manipulación de excepción frente a las instrucciones 'if' le dice al lector de su código algo sobre lo que espera que suceda. Una instrucción 'if' implica que existe una posibilidad considerable de que la condición sea' True' o 'False', mientras' 'try' /' except' implica el manejo de casos extremos. Entonces, aunque EAFP puede ser idóneo python, hay espacio para la interpretación en un caso dado. Además, casi nunca deberías usar 'excepto Excepción 'genérica. – Wilduck
No estoy repitiendo lo que muchas personas ya han dicho, pero hay una gran ventaja de la utilización de excepciones que me gustaría mencionar:
Si falla alguna rutina, puede decidir fácilmente en el que el nivel de indirección que debe manejar esa excepción - y usted no tendrá que inflar los niveles más profundos con la comprobación de error después de, digamos, cada paso.
Por supuesto que no le libera de la responsabilidad de tener un buen código de limpieza que dejará todo en claro para cada ruta de ejecución posible: libere los recursos, los sockets, las transacciones commit o rollback, etc.Y hay muchos medios para hacer eso:
try... finally
bloques, permitiendo que cualquier excepción a propagar, pero la limpieza de todo lo antes (muchos idiomas, incluyendo Python),- la
with
declaración (específico de Python), - el paradigma RAII que implica la limpieza en destructores (principalmente C++).
- 1. ¿Cuándo debe usar JCR y cuándo debe usar JPA/RDBMS?
- 2. ¿Cuándo se debe usar la instrucción Using?
- 3. ¿Cuándo se debe usar [assembly: InternalsVisibleTo()]?
- 4. ¿Cuándo se debe usar POCO en EF4?
- 5. ¿Cuándo se debe usar esto->?
- 6. ¿Cuándo NO se debe usar MVVM?
- 7. ¿Cuándo se debe usar el modelo Actor?
- 8. C# Cuándo debe usar el palabra "this"
- 9. Objetivo C: ¿cuándo debe "typedef" preceder a "enum" y cuándo se debe nombrar una enumeración?
- 10. ¿Cuándo se debe usar intval y cuando int
- 11. ¿Qué hace SqlCommand.Prepare() y cuándo se debe usar?
- 12. ¿Cuándo se debe usar .innerHTML y cuando document.write en JavaScript
- 13. ¿Cuándo se debe usar Throwable en lugar de Excepción nueva?
- 14. ¿Cuándo debería usar una plataforma como OSGI y cuándo debe evitarse?
- 15. NLTK - ¿Cuándo se debe normalizar el texto?
- 16. ¿Cuándo debe usar la inicialización directa y cuándo inicializar la copia?
- 17. ¿Cuándo no se debe usar un servicio web?
- 18. ¿Cuándo se debe usar la opción -m32 de gcc?
- 19. ¿Cuándo se debe usar una vista de memoria?
- 20. ¿Cuándo debe uno llamar a glGetError?
- 21. Cuándo debe extraer un UserControl en WPF
- 22. ¿Cuándo se debe usar un período después de $ en jQuery?
- 23. ¿Cuándo se debe usar la palabra clave volátil en C#?
- 24. ¿Cuándo usar == y cuándo usarlo?
- 25. ¿Cuándo se debe usar Many para las relaciones N: 1 en las clases de dominio Grails?
- 26. .NET - ¿Puede sobre la interfaz, y cuándo no debe interactuar
- 27. ¿Cuándo se debe asignar errno a ENOMEM?
- 28. ¿Cuándo se debe llamar a super.onResume()?
- 29. ¿Cuándo debe elegir utilizar InnoDB en MySQL?
- 30. Cuándo usar Pepino y cuándo usar RSpec?
Esto se ha pedido en innumerables ocasiones (2739582, 1152541, 1313812). Entre esta pregunta, su pregunta 4557577 (y sin duda innumerables otras) y sus ahora más de * ochocientas preguntas *, parece que es una especie de spammer de preguntas. –