ya puedo manejar los errores de mi vida 😦
Básicos del Lenguaje
Guía de instalación y conceptos básicos
Archivos y slides del curso práctico de Python
IMPORTANTE: Instalando Ubuntu Bash en Windows para facilitarte el seguimiento del curso desde Windows.
¿Qué es la programación?
¿Por qué programar con Python?
Operadores matemáticos
Variables y expresiones
Presentación del proyecto
Funciones
Usando funciones en nuestro proyecto
Operadores lógicos
Estructuras condicionales
Uso de strings y ciclos
Strings en Python
Operaciones con Strings en Python
Operaciones con strings y el comando Update
Operaciones con strings y el comando Delete
Operaciones con strings: Slices en python
For loops
While loops
Iterators and generators
Estructuras de Datos
Uso de listas
Operaciones con listas
Agregando listas a nuestro proyecto
Diccionarios
Agregando diccionarios a nuestro proyecto
Tuplas y conjuntos
Tuplas y conjuntos en código
Introducción al módulo collections
Python comprehensions
Búsquedas binarias
Continuando con las Búsquedas Binarias
Manipulación de archivos en Python 3
Uso de objetos y módulos
Decoradores
Decoradores en Python
¿Qué es la programación orientada a objetos?
Programación orientada a objetos en Python
Scopes and namespaces
Introducción a Click
Definición a la API pública
Clients
Servicios: Lógica de negocio de nuestra aplicación
Interface de create: Comunicación entre servicios y el cliente
Actualización de cliente
Interface de actualización
Manejo de errores y jerarquía de errores en Python
Context managers
Python en el mundo real
Aplicaciones de Python en el mundo real
Conclusiones finales
Python 2 vs 3 (Conclusiones)
Clases bonus
Entorno Virtual en Python y su importancia: Python en el mundo real
You don't have access to this class
Keep learning! Join and start boosting your career
Python has an extensive error hierarchy that gives us possibilities to define errors in cases like where a file cannot be read, divide by zero or if there are general problems in our Python code. The problem with this is that our program terminates, it is different from syntax errors where our program never starts.
To "winnow" an error in Python we use the word raise
. Although Python offers many errors it is good practice to define application-specific errors and use Python's errors to extend them.
We can generate our own errors by creating a class that extends BaseException
.
If we want to avoid terminating our program when an error occurs, we must have a strategy. We should use try / except when we have the possibility that a piece of our code will fail
try
: means that this code is executed. If possible, we only put a single line of code in there as a good practice.except
: is our error handling, it is what we will do if the error occurs. We must be specific with the type of error we are going to catch.else
: It is code that is executed when no error occurs.finally
: It allows us to get a block of code that will be executed no matter what happens.Contributions 36
Questions 3
ya puedo manejar los errores de mi vida 😦
Tutorial de Errores y excepciones de python en español.
Python2
http://docs.python.org.ar/tutorial/2/errors.html
Python3
http://docs.python.org.ar/tutorial/3/errors.html
Un error común que me ha tocado solucionar try/catch es la conexión a la base de datos
.
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
| +-- ModuleNotFoundError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
Muy claro, este concepto lo usas en el curso de Ingeniería de Datos con Python y por fin lo entiendo!
Esta clase si tiene una explicación demasiado pobre, sin ejemplos y sin demostrar todo el potencial de para que sirve el manejo de errores 😦
ya puedo mostrar programas a los de la oficina sin que salgan errores y sin dar mal percepcion
try: significa que se ejecuta este código. Si es posible, solo ponemos una sola línea de código ahí como buena práctica
except: es nuestro manejo del error, es lo que haremos si ocurre el error. Debemos ser específicos con el tipo de error que vamos a atrapar.
else: Es código que se ejecuta cuando no ocurre ningún error.
finally: Nos permite obtener un bloque de código que se va a ejecutar sin importar lo que pase.
Cuando usemos Try: La buena práctica es usar una sola línea de código.
Except:
Ejecuta esté código cuando hay una excepción.
Else: No exceptions? ejecuta esto
De hecho algo que te solicitan como programador de Python suelen solicitar que uses excepciones.
Palabras reservadas para manejar un error o excepciones en Python:
try: Permite que un bloque de codigo busque errores
.
except: Bloque que permite manejar el error
.
finally: Bloque que permite ejecutar codigo, independientemente del resultado de los bloques try y except
.
IMPORTANTE Para manejar el error debemos conocer el tipo de error que genera o que generara al momento de ejecutarlo
.
Como conocer el error que genera un codigo: Para hacer saber a la otra persona o a nosotros mismo que tipo de error esta generando el programa podemos hacerlo de igual forma como vemos el tipo de dato que estamos manejando puesto que recuerda que todo en python es un objeto, entonces en este caso pudiesemos aplicar lo siguiente:
Ejemplo:
try:
c = int(input("Ingrese un valor: "))
c / 0
except Exception as c: #Con esto estamos evaluando la variable para la excepcion
print(type(c)._name) ---> Con esto podemos saber el tipo de el error y el nombre del mismo
#ZeroDivisionError
---
De esta forma, estaria evaluando el error, por que por ejemplo si le pasamos una cadena de texto, entonces el resultado sera un ValueError
IMPORTANTE Tambien podemos poner otras declaraciones de except, para hacer multiples excepciones dentro de una misma declaracion
Toca profundizar también para generar warnings
https://docs.python.org/3/library/warnings.html#warning-categories
BaseException
├── BaseExceptionGroup
├── GeneratorExit
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ExceptionGroup [BaseExceptionGroup]
├── ImportError
│ └── ModuleNotFoundError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── MemoryError
├── NameError
│ └── UnboundLocalError
├── OSError
│ ├── BlockingIOError
│ ├── ChildProcessError
│ ├── ConnectionError
│ │ ├── BrokenPipeError
│ │ ├── ConnectionAbortedError
│ │ ├── ConnectionRefusedError
│ │ └── ConnectionResetError
│ ├── FileExistsError
│ ├── FileNotFoundError
│ ├── InterruptedError
│ ├── IsADirectoryError
│ ├── NotADirectoryError
│ ├── PermissionError
│ ├── ProcessLookupError
│ └── TimeoutError
├── ReferenceError
├── RuntimeError
│ ├── NotImplementedError
│ └── RecursionError
├── StopAsyncIteration
├── StopIteration
├── SyntaxError
│ └── IndentationError
│ └── TabError
├── SystemError
├── TypeError
├── ValueError
│ └── UnicodeError
│ ├── UnicodeDecodeError
│ ├── UnicodeEncodeError
│ └── UnicodeTranslateError
└── Warning
├── BytesWarning
├── DeprecationWarning
├── EncodingWarning
├── FutureWarning
├── ImportWarning
├── PendingDeprecationWarning
├── ResourceWarning
├── RuntimeWarning
├── SyntaxWarning
├── UnicodeWarning
└── UserWarning
Los errores deben ser manejados de manera estrátégica.
Jerarquía de errores:
Atrapamos los errores para que sean controlados.
A la hora de atrapar un error, tambien necesitamos generar una estrategia, debido a que esa parte en especifico de nuestro programa no puede parar, de esa forma hacemos un try catch que en Python seria mejor dicho como un try: except (error) as error:para hacer una incorporacion en caso de que falle.
Para aventar un error utiizamos el keyword raise, es decir que cuando ocurre algo que sabemos que puede pasar, entonces lanzamos un error para que este termine indicando el error.
Los errores en Python, hacen que el programa termine justo en el momento que se lanza ese error. Por lo que es una desventaja si necesitamos que siga corriendo a pesar de que exista el error.
Los iteradores lanzan una excepción al final. Un
for i in range(n):...
Lanza una expeción al final.
Buena Info, adelantarse a posiblies errores
Para complementar la clase, este es un tutorial con ejemplos de manejo de errores (try, except):
Python utiliza la programacion orientada a objetos con sus errores, de lo que podemos aprovecharnos para extender otros errores.
BaseException es en pocas palabras: todos los errores.
finally se ejecuta no importa lo que pase, debido a que puede que solucionando el error, no terminemos procesos y debido a que el codigo ya se ejecuto, no podemos arreglar o cerrar lo que abrimos, por ello finally nos permite tener un soporte detras.
else es cuando no ocurre un error, osea, cuando va bien, cosa interesante debido a que es mal visto en otros lenguajes.
Except es sencillo, solo ponemos el error que puede suceder, y luego el codigo a ejecutar si este no funciona.
Para poner en forma nuestra estrategia, solo tenemos que poner try, que es el primero, dentro del cual es debidamente adecuado solo poner una sola linea de codigo, ya que si ingresamos mas lineas corremos el riesgo de tener que manejar un error por cada linea.
En Python tenemos una buena sintaxis de errores, Try, except, else and finally.
it's a good practice to define the own applications errors, and uniquely use the built-in exceptions in case we have a problem that fit with it.
Nosotros tambien podemos crear nuestros errores, solo tenemos que poner en nuestra clase, la super clase BaseException.
Python tiene un jerarquia rica de errores.
ya puedo manejar el error de mi ex :v
en otros lenguajes conocía el try/catch,
sin embargo el try/except/else/finally es mucho mas rico en posibilidades.
raise
.BaseException
.try ... except ... else ... finaly
.
Want to see more contributions, questions and answers from the community?