Apuntes_Python/02_conceptos/09_exceptions_and_errors/README.md

3.9 KiB

Errores y Excepciones

Error de sintaxis

a = 5 print(a)
SyntaxError: invalid syntax

print('hola'))
SyntaxError: unmatched ')'

Error de tipo

a = 5 + 'hola'
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Error de importación

import supermodulo
ModuleNotFoundError: No module named 'supermodulo'

Error de nombre

a = b
NameError: name 'b' is not defined

Error archivo no encontrado

f = open('algun_archivo')
FileNotFoundError: [Errno 2] No such file or directory: 'algun_archivo'

Error de valor

a = [1,2,3]
a.remove(4)
ValueError: list.remove(x): x not in list

Error de indice

a = [1,2,3]
a[3]
IndexError: list index out of range

Error de llave

mi_dicc = {'nombre': 'Alexanderson'}
mi_dicc['edad']
KeyError: 'edad'

Levantar una excepción

x = -5
if x < 0:
    raise Exception('x debe ser positivo')
Exception: x debe ser positivo

Assert

x = -5
assert(x > 0), 'x no es positivo'
AssertionError: x no es positivo

Manejo de excepciones

try:
    a = 5/0
except Exception as e:
    print('ha ocurrido un error -->', e)

try:
    a = 5/0
    b = a + 'que'
except ZeroDivisionError as e:
    print(e)
except TypeError as e:
    print(e)
else:
    print('todo esta bien')
finally:
    print('siempre se llega aquí')

Definir excepciones propias

Con clases de error propias. (SubClase de BaseException)

class ValorMuyAltoError(Exception):
    pass

class ValorMuyBajoError(Exception):
    def __init__(self, message, value):
        self.message = message
        self.value = value

def test_valor(x):
    if x > 100:
        raise ValorMuyAltoError('El valor es muy alto')
    if x < 5:
        raise ValorMuyBajoError('El valor es muy bajo', x)

try:
    test_valor(2)
except ValorMuyAltoError as e:
    print(e)
except ValorMuyBajoError as e:
    print(e.message, e.value)