Está muy bien utilizar excepciones para controlar fallos que no se pueden preveer.
En este caso es un abuso de lla estructura try..except.
Sabiendo que vamos a abrir un fichero de una carpeta que el usuario selecciona, es muy probable y previsible que el fichero no esté en la carpeta.
El ejemplo más simple es pedir dos números y devolver la divisón entre ellos.
Con un simple IF se solucionan todos los errores posibles (división por 0)
En cambio, podemos hacer la división, dejar que falle y que se maneje la excepción. Esto consume muchos más recursos del ordenador, entorpece la lectura del código y rompe la fluidez que debería tener.
Código Delphi
[-]begin
if (b=0) then
Mensaje ('No se puede dividir por 0');
else
Resultado := a/b;
end;
Código Delphi
[-]begin
try
Resultado := a/b;
except
on e:Exception do
Mensaje('Ha ocurrido un erro: '+E.Message)
end;
end;