Está en la página 1de 15

Excepciones y serialización de

objetos
Lenguajes de Programación
1. Excepciones
Cómo capturar las excepciones?
 Con la estructura try-except para tratar las excepciones
 En el try se coloca el código que podría producir la
excepción
 El bloque except (excepción) permite indicar el tratamiento
que se llevará a cabo de producirse dicha excepción
 Probar:
try:
f = file(“archivo.txt”)
except:
print “El archivo no existe”
Varios except
try:
num = int(“3a”)
print no_existe
except NameError:
print “La variable no existe”
exceptValueError:
print “El valor no es un numero”
Un mismo except
try:
num = int(“3a”)
print no_existe
except (NameError, ValueError):
print “Ocurrio un error”
Else
 La construcción try-except puede contar además con una
clausula else, que define un fragmento de código a ejecutar
sólo si no se ha producido ninguna excepción en el
try.
try:
num = 33
except:
print “Hubo un error!”
else:
print “Todo esta bien”
Finally
 También existe una clausula finally que se ejecuta siempre, se
produzca o no una excepción. Esta clausula se suele utilizar,
entre otras cosas, para tareas de limpieza.
try:
z=x/y
except ZeroDivisionError:
print “Division por cero”
finally:
print “Limpiando”
Creando propias excepciones
 También es interesante comentar podemos crear y lanzar nuestras
propias excepciones. Basta crear una clase que herede de Exception o
cualquiera de sus hijas y lanzarla con raise.
class MiError(Exception):
def __init__(self, valor):
self.valor = valor
def __str__(self):
return “Error “ + str(self.valor)
try:
if resultado > 20:
raise MiError(33)
except MiError as e: #En python 2.X es MiError, e
print e
2. Serialización de objetos
Qué es la serialización?
 Necesidad de guardar un objeto a disco para poder
recuperarlo más tarde, o es necesario mandar un objeto a
través de la red, a otro programa en Python ejecutándose en
otra máquina.
 Al proceso de transformar el estado de un objeto en un
formato que se pueda almacenar, recuperar y transportar se
le conoce como serialización o marshalling
Módulos que permiten serializar
 En Python tenemos varios módulos que nos facilitan esta tarea, como
marshal, pickle, cPickle y shelve

 El módulo marshal es el más básico y el más primitivo de los tres, su


razón de ser no es el de serializar objetos, sino trabajar con bytecode
Python (archivos .pyc).

 pickle, por su parte, permite serializar casi cualquier objeto (objetos de


tipos definidos por el usuario, colecciones que contienen colecciones,
etc) y cuenta con algunos mecanismos de seguridad básicos y es lento.

 La solución, si la velocidad de la serialización es importante utilice


cPickle, que no es más que es una implementación en C de pickle.
cPickle es hasta 1000 veces más rápido que pickle, e igual que marshal.
Utilizar cPickle o pickle

 La forma de serializar un objeto usando pickle es mediante una


llamada a la función dump pasando como argumento el objeto a
serializar y un objeto archivo en el que guardarlo (o cualquier
otro tipo de objeto similar a un archivo, siempre que ofrezca
métodos read, realine y write).
Usando dump en python 2.x

 La función dump también tiene un parámetro opcional protocol


que indica el protocolo a utilizar al guardar. Por defecto su valor
es 0, que utiliza formato texto y es el menos eficiente. El
protocolo 1 es más eficiente que el 0, pero menos que el 2. Tanto
el protocolo 1 como el 2 utilizan un formato binario.
Función load en python 2.x
Guardando dos listas en python 2.x
Ejemplo pickle 3.x

También podría gustarte