Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New intro to exceptions lecture #165

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 11 additions & 21 deletions _sources/lectures/TWP54/TWP54_1.rst
Original file line number Diff line number Diff line change
@@ -1,33 +1,23 @@
Introducción a las excepciones
==============================

.. image:: ../img/TWP54_001.jpg
:height: 14.249cm
:width: 17.401cm
:align: center
:alt:


+ A veces las cosas salen mal. Y necesitas tratarlas.
+ A veces las cosas salen mal, y necesitas tratarlas.

+ Siempre hay cosas que están fuera de tu control. Las redes fallan.
Los archivos desaparecen.

+ Los códigos inteligentes aprenden a lidiar con estos errores y hacen que
programa para recuperarse sin problemas.
el programa pueda depurarse sin mayor problema.


.. activecode:: ac_l54_1
:nocodelens:

Vamos a intentar abrir el archivo ``numeros.txt``, el cual no existe.

¡Qué mal olor!
--------------
~~~~
archivo = open("numeros.txt", "r")

.. image:: ../img/TWP54_002.jpg
:height: 14.477cm
:width: 12.6cm
:align: center
:alt:

.. image:: ../img/TWP54_003.jpg
:height: 14.219cm
:width: 20.601cm
:align: center
:alt:
El código anterior produce un error que dice que el archivo al que
intentamos acceder no existe.
59 changes: 16 additions & 43 deletions _sources/lectures/TWP54/TWP54_2.rst
Original file line number Diff line number Diff line change
@@ -1,50 +1,23 @@
Se lanza una excepción
======================

.. image:: ../img/TWP54_004.jpg
:height: 11.211cm
:width: 22.859cm
:align: center
:alt:


Atrapando la excepción
----------------------

.. image:: ../img/TWP54_005.jpg
:height: 14.432cm
:width: 22.771cm
:align: center
:alt:


Manejo de excepciones
---------------------

.. code-block :: python
=====================

def salvar_dados():
try:
fileD = open("encomendas.txt","a")
fileD.write("Destino:\n")
fileD.write("%s\n" %destino.get())
fileD.write("Descripcion:\n")
fileD.write("%s\n" %descripcion.get())
fileD.write("Habla:\n")
fileD.write("%s\n" %Habla.get("1.0",END))
destino.set(None)
descricao.delete(0,END)
endereco.delete("1.0",END)
except Excepción como excepciones:
app.title('archivo de grabación %s' %excepcion)
Para manejar una exepción tenemos que identificar el pedazo de código que
creemos que pueda levantar una exepción. Después, incluimos la cláusula
``try`` en ese pedazo de código. Por último usamos la palabra clave ``except``
para, en caso de que haya una excepción, manejarla.

.. activecode:: ac_l54_2
:nocodelens:

Nuevamente intentemos abrir el archivo ``numeros.txt``, el cual no existe.
Pero ahora manejemos la excepción con ``try`` y ``except``.

+ Obs.: para você testar a exceção deverá alterar as propriedades do arquivo
~~~~
nombre_arch = "numeros.txt"
try:
archivo = open(nombre_arch, "r")
except:
print(f"El archivo {nombre_arch} no existe")


.. image:: ../img/TWP54_007.jpg
:height: 7.611cm
:width: 22.859cm
:align: center
:alt:
Note que ya no se produce el error.
101 changes: 68 additions & 33 deletions _sources/lectures/TWP54/TWP54_3.rst
Original file line number Diff line number Diff line change
@@ -1,33 +1,68 @@
Usando un messagebox
====================

.. code-block :: python

def salvar_dados():
try:
fileD = open("encomendas.txt","a")
fileD.write("Destino:\n")
fileD.write("%s\n" %destino.get())
fileD.write("Descricao:\n")
fileD.write("%s\n" %descricao.get())
fileD.write("Endereco:\n")
fileD.write("%s\n" %endereco.get("1.0",END))
destino.set(None)
descricao.delete(0,END)
endereco.delete("1.0",END)
except Exception as excecao:
app.title('Erro de gravacao no arquivo %s' %excecao)


.. image:: ../img/TWP54_009.jpg
:height: 8.042cm
:width: 18.335cm
:align: center
:alt:


.. image:: ../img/TWP54_010.jpg
:height: 15.573cm
:width: 13.348cm
:align: center
:alt:
Excepciones comunes
===================

Estas son algunas errxcepciones comunes que encontrarás al escribir
programas simplerrs.

NameError
---------

Ocurre cuando el programa no encuentra el nombre de un objeto que mencionaste en el código.

.. activecode:: ac_l54_3a
:nocodelens:

a = 1
try:
print(b)
except NameError as err:
print(f"Error: {err}")


TypeError
---------

Ocurre cuando se quiere realizar una operación en un tipo de objeto incorrecto.

.. activecode:: ac_l54_3b
:nocodelens:

try:
len(5)
except TypeError as err:
print(f"Error: {err}")


ValueError
----------

Ocurre cuando se quiere realizar una operación en donde el tipo de objeto es correcto,
pero el valor es inapropiado.

.. activecode:: ac_l54_3c
:nocodelens:

import math

try:
raiz_cuadrada = math.sqrt(-4)
except ValueError as err:
print(f"Error: {err}")


ZeroDivisionError
-----------------

Ocurre cuando en una operación de división el denominador es ``0``.

.. activecode:: ac_l54_3d
:nocodelens:

numerador = 5
denominador = 0

try:
numerador/denominador
except ZeroDivisionError as err:
print(f"Error: {err}")

46 changes: 46 additions & 0 deletions _sources/lectures/TWP54/TWP54_4.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
Ejercicio
=========

.. activecode:: ac_l54_4
:nocodelens:

El siguiente código produce una excepción. Córralo una vez para ver el nombre
de la excepción, y después modifique el código para manejar dicha excepción.
Utilice la estructura vista en los ejemplos de la página anterior:
``except Excepcion as err:``. Al manejar la excepción se debe imprimir en consola
el mensaje ``"Error: {e}"``. También, ``mi_funcion`` debe regresar la
excepción ``err``.

~~~~
def mi_funcion():
edades = [18, 19, 20]
cuarta = edades[3]

mi_funcion()


====
import StringIO
import sys
from unittest.gui import TestCaseGui


class myTests(TestCaseGui):
def testOne(self):

self.assertEqual(type(mi_funcion()), IndexError, "Probando que la excepción en e sea la correcta")


def testTwo(self):
capturedOutput = StringIO.StringIO() # Create StringIO object
sys.stdout = capturedOutput # and redirect stdout.
mi_funcion() # Call function.
sys.stdout = sys.__stdout__ # Reset redirect.
self.assertEqual(
f"Error: {mi_funcion()}",
"Error: list index out of range",
"Probando que el mensaje en la consola sea el correcto",
)


myTests().main()
24 changes: 24 additions & 0 deletions _sources/lectures/TWP54/TWP54_5.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Excepciones en la lectura MVC
=============================

.. image:: ../img/TWP54_001.jpg
:height: 14.249cm
:width: 17.401cm
:align: center
:alt:


¡Qué mal olor!
--------------

.. image:: ../img/TWP54_002.jpg
:height: 14.477cm
:width: 12.6cm
:align: center
:alt:

.. image:: ../img/TWP54_003.jpg
:height: 14.219cm
:width: 20.601cm
:align: center
:alt:
46 changes: 46 additions & 0 deletions _sources/lectures/TWP54/TWP54_6.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
Se lanza una excepción
======================

.. image:: ../img/TWP54_004.jpg
:height: 11.211cm
:width: 22.859cm
:align: center
:alt:


Atrapando la excepción
----------------------

.. image:: ../img/TWP54_005.jpg
:height: 14.432cm
:width: 22.771cm
:align: center
:alt:


.. code-block :: python

def salvar_dados():
try:
fileD = open("encomendas.txt","a")
fileD.write("Destino:\n")
fileD.write("%s\n" %destino.get())
fileD.write("Descripcion:\n")
fileD.write("%s\n" %descripcion.get())
fileD.write("Habla:\n")
fileD.write("%s\n" %Habla.get("1.0",END))
destino.set(None)
descricao.delete(0,END)
endereco.delete("1.0",END)
except Excepción como excepciones:
app.title('archivo de grabación %s' %excepcion)


+ Obs.: para você testar a exceção deverá alterar as propriedades do arquivo


.. image:: ../img/TWP54_007.jpg
:height: 7.611cm
:width: 22.859cm
:align: center
:alt:
33 changes: 33 additions & 0 deletions _sources/lectures/TWP54/TWP54_7.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Usando un messagebox
====================

.. code-block :: python

def salvar_dados():
try:
fileD = open("encomendas.txt","a")
fileD.write("Destino:\n")
fileD.write("%s\n" %destino.get())
fileD.write("Descricao:\n")
fileD.write("%s\n" %descricao.get())
fileD.write("Endereco:\n")
fileD.write("%s\n" %endereco.get("1.0",END))
destino.set(None)
descricao.delete(0,END)
endereco.delete("1.0",END)
except Exception as excecao:
app.title('Erro de gravacao no arquivo %s' %excecao)


.. image:: ../img/TWP54_009.jpg
:height: 8.042cm
:width: 18.335cm
:align: center
:alt:


.. image:: ../img/TWP54_010.jpg
:height: 15.573cm
:width: 13.348cm
:align: center
:alt:
4 changes: 4 additions & 0 deletions _sources/lectures/TWP54/toctree.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@ Excepciones
TWP54_1.rst
TWP54_2.rst
TWP54_3.rst
TWP54_4.rst
TWP54_5.rst
TWP54_6.rst
TWP54_7.rst
Loading
Loading