Duda no Try..Except
Señores, tengo un bloco Try..Except, donde yo tengo un codigo para crear un directorio(CreateDir(Path)), pero antes doy un DirectoryExists. Que pasa es, que si fuera posible crear mi Directorio, gustaria que fuera para el bloco Except para yo tratar mi excepccion, pero no esta asi. Si no crea, se va al final, olvidando el Except.
|
Puedes crear cuantos try except quieras, lo que tienes que ver es que excepción te provoca la no existencia de directorio o más bien crearte tu la excepción. ejemplito:
sacado de la ayuda de Delphi :D |
El que yo gustaria es entrar en except siempre que una execpccion fuera encontrada como en mi codigo.
|
Entonces necesitas es un Try...finally.
Y No "silencies" la excepcion. Siempre es mejor relanzar las excepciones. Es mucho mejor que los errores salgan tan escandalosamente como sea posible porque eso fuerza a hacer los programas mas robustos y ayudan a no tener errores ocultos, como en tu caso: Que garantiza que el error sea por lo que tu piensas? Puede ser un problema de seguridad, o de memoria. O por el frio... |
Juntando lo que te han dicho, yo usaría este:
Utilizando lo que hay en el finally sólo sacas el mensaje cuando exista error. Además siempre compruebas si lo ha habido; Por ultimo, queda el Except, por si ocurre cualquier otro error inesperado, que tengas constancia de él. Tal vez, yo lo organizaría de otra forma, pero mantendría esos elementos. |
Cita:
No entiendo bien por qué te han mencionado lo del finally. No le veo relación al asunto. // Saludos |
Tienes razon roman. Pense era que deseaba que algo siempre se ejcutara, independientemente de si habia o no excepcion.
De todas maneras, la forma de hacer el codigo esta defectuosa. Al enmascarar el error y presuponer la causa se esta dejando un problema latente que luego se podria convertir en un bug dificil de determinar. Existen muchas razones por las cuales un directorio puede o no alterarse. |
Cita:
A mi en particular no me gusta generar excepciones donde no las hay. Si CreateDir devuelve false, actúo en consecuencia ahí mismo, si necesidad de generar una excepción para tratarla cinco líneas abajo. // Saludos |
La franja horaria es GMT +2. Ahora son las 10:27:45. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi