Está en la página 1de 3

Manejo de Errores

El manejo de excepciones ayuda al programador a trasladar el código para manejo


de errores de la línea principal de ejecución, además se puede elegir entre manejar
todas las excepciones, las de cierto tipo o de las de grupos relacionados, esto hace
que la probabilidad de pasar por alto los errores se reduzca y a la vez hace los
programas más robustos. Pero es importante utilizar un lenguaje de programación
que soporte este manejo, de lo contrario el procesamiento de errores no estará
incluido y hará el programa más vulnerable. Este manejo está diseñado para
procesar errores que ocurren cuando se ejecuta una instrucción, algunos ejemplos
son: desbordamiento aritmético, división entre cero, parámetros inválidos de método
y asignación fallida en la memoria. Sin embargo, no está diseñado para procesar
problemas con eventos independientes al programa como son pulsar una tecla o
clic al mouse.
Las excepciones se dividen en verificadas y no verificadas. Es importante esta
división porque el compilador implementa requerimientos de atrapar o declarar para
las verificadas lo que hará que se detecten las excepciones automáticamente y de
acuerdo al lenguaje de programación utilizado se utilizará un método para
corregirlas. Sin embargo, para las no verificadas se producirá un error indicando
que deben atraparse y declararse. Por eso el programador debe pensar en los
problemas que pueden ocurrir cuando se llama a un método y definir excepciones
para verificarse cuando sean importantes. Las clases de excepciones pueden
derivarse de una superclase común, por lo que, con un manejador para atrapar
objetos de la superclase, también se pueden atrapar todos los objetos de las
subclases de esa clase. Pero también, se pueden atrapar a cada uno de los tipos
de las subclases de manera individual si estas requieren ser procesadas diferente.

La forma tradicional

Habitualmente cuando un programador hace algo, tal como llamar a una función,
puede evaluar la validez del resultado devuelto por dicha función. Por ejemplo, si
intentamos abrir un archivo que no existe, el resultado devuelto podría ser nulo. Hay
dos estrategias comunes para manejar este tipo de situaciones:

1. Incluir el código del error en el resultado de la función, o


2. utilizar una variable global con el estatus del error.

Esto produce programas de gran calidad donde casi la mitad del código se ocupa
en revisar si todas las acciones se desarrollan normalmente o si producen algún tipo
de error. (Addison-Weasley)
El uso de excepciones

En los entornos de programación más recientes se ha desarrollado una forma


alternativa de manejar los errores, conocida como manejo de excepciones, la cual
funciona generando una excepción tan pronto aparece un error. El sistema fuerza
un salto hacia el bloque de excepciones más cercano del código en el cual se toman
las acciones apropiadas tendientes a solucionar o alertar acerca del error producido.

 Errores de sintaxis: estos errores son seguramente los más simples de


resolver, pues son detectados por el intérprete (o por el compilador, según
el tipo de lenguaje que estemos utilizando) al procesar el código fuente y
generalmente son consecuencia de equivocaciones al escribir el programa.
En el caso de Python estos errores son indicados con un
mensaje SyntaxError. Por ejemplo, si trabajando con Python intentamos
definir una función y en lugar de def escribimos dev.
 Errores semánticos: se dan cuando un programa, a pesar de no generar
mensajes de error, no produce el resultado esperado. Esto puede deberse,
por ejemplo, a un algoritmo incorrecto o a la omisión de una sentencia.
 Errores de ejecución: estos errores aparecen durante la ejecución del
programa y su origen puede ser diverso. En ocasiones pueden producirse
por un uso incorrecto del programa por parte del usuario, por ejemplo, si el
usuario ingresa una cadena cuando se espera un número. En otras ocasiones
pueden deberse a errores de programación, por ejemplo, si una función
intenta acceder a la quinta posición de una lista de 3 elementos o realizar
una división por cero. Una causa común de errores de ejecución que
generalmente excede al programador y al usuario, son los recursos externos
al programa, por ejemplo, si el programa intenta leer un archivo y el mismo
se encuentra dañado. (Hall)
Tanto a los errores de sintaxis como a los semánticos se los puede detectar y
corregir durante la construcción del programa ayudados por el intérprete y la
ejecución de pruebas. Pero no ocurre esto con los errores de ejecución ya que no
siempre es posible saber cuándo ocurrirán y puede resultar muy complejo (o
incluso casi imposible) reproducirlos. Es por ello que el resto de la unidad nos
centraremos en cómo preparar nuestros programas para lidiar con este tipo de
errores.
El análisis léxico constituye la primera fase, aquí se lee el programa fuente de
izquierda a derecha y se agrupa en componentes léxicos (tokens), que son
secuencias de caracteres que tienen un significado. Además, todos los espacios en
blanco, líneas en blanco, comentarios y demás información innecesaria se elimina
del programa fuente. También se comprueba que los símbolos del lenguaje
(palabras clave, operadores,...) se han escrito correctamente.

Como la tarea que realiza el analizador léxico es un caso especial de coincidencia


de patrones, se necesitan los métodos de especificación y reconocimiento de
patrones, y éstos métodos son principalmente las expresiones regulares y
los autómatas finitos. Sin embargo, un analizador léxico también es la parte del
traductor que maneja la entrada del código fuente, y puesto que esta entrada a
menudo involucra un importante gasto de tiempo, el analizador léxico debe
funcionar de manera tan eficiente como sea posible.

Son pocos los errores simplemente en el nivel léxico ya que tiene una visión muy
restringida de un programa fuente. El analizador léxico debe devolver el
componente léxico de un identificador y dejar a otra fase se ocupe de los errores.

Un error de sintaxis se detecta cuando el analizador sintáctico espera un símbolo


que no corresponde al que se acaba de leer. Los analizadores sintácticos LL y LR
tienen la ventaja de que pueden detectar errores sintácticos lo más pronto posible,
es decir, se genera un mensaje de error en cuanto el símbolo analizado no sigue la
secuencia de los símbolos analizados hasta ese momento. (Arroyo, 2018)

También podría gustarte