Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

Errores

Los errores detienen la ejecuci贸n del programa y tienen varias causas. Para poder estudiarlos mejor vamos a provocar algunos intencionadamente.

Errores de sintaxis

Identificados con el c贸digo SyntaxError, son los que podemos apreciar repasando el c贸digo, por ejemplo al dejarnos de cerrar un par茅ntesis:

Note

print("Hola"
File "<ipython-input-1-8bc9f5174855>", line 1
    print("Hola"
                ^
SyntaxError: unexpected EOF while parsing

Errores de nombre

Se producen cuando el sistema interpreta que debe ejecutar alguna funci贸n, m茅todo... pero no lo encuentra definido. Devuelven el c贸digo NameError:

Note

pint("Hola")
<ipython-input-2-155163d628c2> in <module>()
----> 1 pint("Hola")

NameError: name 'pint' is not defined

La mayor铆a de errores sint谩cticos y de nombre los identifican los editores de c贸digo antes de la ejecuci贸n, pero existen otros tipos que pasan m谩s desapercibidos.

Errores sem谩nticos

Estos errores son muy dif铆ciles de identificar porque van ligados al sentido del funcionamiento y dependen de la situaci贸n. Algunas veces pueden ocurrir y otras no.

La mejor forma de prevenirlos es programando mucho y aprendiendo de tus propios fallos, la experiencia es la clave. Veamos un par de ejemplos:

Ejemplo pop() con lista vac铆a

Si intentamos sacar un elemento de una lista vac铆a, algo que no tiene mucho sentido, el programa dar谩 fallo de tipo IndexError. Esta situaci贸n ocurre s贸lo durante la ejecuci贸n del programa, por lo que los editores no lo detectar谩n:

Note

l = []
l.pop()
<ipython-input-6-9e6f3717293a> in <module>()
----> 1 l.pop()

IndexError: pop from empty list

Para prevenir el error deber铆amos comprobar que una lista tenga como m铆nimo un elemento antes de intentar sacarlo, algo factible utilizando la funci贸n len():

Note

l = []

if len(l) > 0:
    l.pop()

Ejemplo lectura de cadena y operaci贸n sin conversi贸n a n煤mero

Cuando leemos un valor con la funci贸n input(), 茅ste siempre se obtendr谩 como una cadena de caracteres. Si intentamos operarlo directamente con otros n煤meros tendremos un fallo TypeError que tampoco detectan los editores de c贸digo:

Note

n = input("Introduce un n煤mero: ")

print("{}/{} = {}".format(n,m,n/m))
Introduce un n煤mero: 4

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-85bb893ab3e3> in <module>()
----> 1 print("{}/{} = {}".format(n,m,n/m))

TypeError: unsupported operand type(s) for /: 'str' and 'int'

Como ya sabemos este error se puede prevenir transformando la cadena a entero o flotante:

Note

n = float(input("Introduce un n煤mero: "))
m = 4
print("{}/{} = {}".format(n,m,n/m))
Introduce un n煤mero: 10
10.0/4 = 2.5

Sin embargo no siempre se puede prevenir, como cuando se introduce una cadena que no es un n煤mero:

Note

n = float(input("Introduce un n煤mero: "))
m = 4
print("{}/{} = {}".format(n,m,n/m))
Introduce un n煤mero: aaa

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-14-c0e7fd4a26a9> in <module>()
----> 1 n = float(input("Introduce un n煤mero: "))
    2 m = 4
    3 print("{}/{} = {}".format(n,m,n/m))

ValueError: could not convert string to float: 'aaa'

Como pod茅is suponer, es dif铆cil prevenir fallos que ni siquiera nos hab铆amos planteado que pod铆an existir. Por suerte para esas situaciones existen las excepciones.


脷ltima edici贸n: 26 de Septiembre de 2018