Fundamentos de Programación y Python

1

Fundamentos de Programación con Python para Principiantes

2

Instalación y Uso Básico de Python en Windows y Mac

3

Semántica y Sintaxis en Programación Python

4

Práctica: Te doy la bienvenida a los ejercicios interactivos

5

Manejo de Cadenas y Operaciones Básicas en Python

6

Tipos de Datos en Python: Enteros, Flotantes y Booleanos

7

Dominio de la función `print` en Python: usos y formatos avanzados

8

Operaciones matemáticas avanzadas en Python: módulo, potencia y más

9

Entrada de información y manejo de tipos de datos en Python

Colección y Procesamiento de Datos en Python

10

Manipulación de Listas en Python: Creación, Indexación y Métodos Básicos

11

Copiar listas en Python sin compartir memoria con slicing

12

Manejo de Matrices y Tuplas en Python

13

Matrices en Juegos y Imágenes con Python

14

Diccionarios en Python: Uso y Manipulación de Datos

Control de Flujo en Python

15

Estructuras Condicionales en Programación: Uso de If, Else y Elif

16

Iteración y control de flujo con bucles en Python

17

Iteradores y Generadores en Python: Uso Eficiente de Memoria

18

Listas por comprensión en Python: creación y optimización de listas

Funciones y Manejo de Excepciones en Python

19

Funciones y Parámetros en Python: Crea una Calculadora Básica

20

Funciones Lambda en Python: Uso y Aplicaciones Prácticas

21

Recursividad en Python: Factoriales y Serie de Fibonacci

22

Manejo de Excepciones y Errores en Python

Programación Orientada a Objetos en Python

23

Programación Orientada a Objetos en Python: Clases y Métodos Básicos

24

Gestión de Biblioteca con Programación Orientada a Objetos

25

Herencia y Polimorfismo en Programación Orientada a Objetos

26

Programación Orientada a Objetos: Implementación de Clases y Herencia

27

Polimorfismo en Programación Orientada a Objetos

28

Herencia y Uso de la Función super() en Python

29

Programación Orientada a Objetos: Atributos, Métodos y `super()` en Python

Lectura y escritura de archivos

30

Manipulación de Archivos TXT y CSV en Python

31

Manipulación de archivos CSV con Python: lectura y escritura

32

Manejo de Archivos JSON en Python para Aplicaciones Web y APIs

Biblioteca estándar de Python

33

Uso Eficiente de la Biblioteca Estándar de Python

34

Uso de las librerías OS, Math y Random en Python

35

Análisis de Datos de Ventas con Python y Statistics

36

Desarrollo del juego Batalla Naval en Python

Conceptos avanzados de Python

37

Programación Avanzada en Python: POO, Excepciones y Proyectos

38

Escritura de Código Pytónico y Buenas Prácticas en Python

39

Comentarios y Docstrings: Buenas Prácticas en Programación

40

Tiempo de vida y alcance de variables en Python

41

Anotaciones de Tipo en Python para Código Más Legible

42

Validación de Tipos y Manejo de Excepciones en Python

43

Estructuras de Datos Avanzadas en Python: Collection y Enumeraciones

Decoradores

44

Decoradores en Python: Extiende Funcionalidades de Funciones

45

Uso de Decoradores Anidados y con Parámetros en Python

46

Decoradores en Programación Orientada a Objetos en Python

Métodos y estructura de clases en Python

47

Uso de Métodos Mágicos en Python

48

Sobrecarga de Operadores en Python: Personaliza Comportamiento de Clases

49

Ejecutar scripts Python con `if __name__ == '__main__'`

50

Metaprogramación en Python: Métodos `__new__` y `__init__`

51

Uso de *args y **kwargs en funciones de Python

52

Métodos y Atributos Privados y Protegidos en Python

53

Uso de Property en Python: Getter, Setter y Eliminación de Atributos

54

Métodos estáticos y de clase en Python

Programación concurrente y asíncrona

55

Concurrencia y Paralelismo en Python: Técnicas y Librerías Básicas

56

Concurrencia y Paralelismo en Python: `threading` y `multiprocessing`

57

Asincronismo en Python con AsyncIO y Corrutinas

58

Sincronía y Concurrencia en Python: Teoría y Práctica

Creación de módulos y paquetes

59

Módulos y Paquetes en Python: Reutilización y Organización de Código

60

Uso de Paquetes y Subpaquetes en Python con Visual Studio Code

61

Publicación de Paquetes Python en PyPI

Proyecto final

62

Sistema de Gestión de Reservas en Python Avanzado

63

Sistema de Gestión de Reservas en Python Avanzado

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Python

Curso de Python

Carli Code

Carli Code

Manejo de Excepciones y Errores en Python

22/63
Recursos

Las excepciones en Python están organizadas en una jerarquía de clases, donde las excepciones más generales se encuentran en la parte superior y las más específicas en la parte inferior.

Esta organización jerárquica permite a los programadores manejar excepciones de manera más precisa y efectiva.

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
transformados = [x * 2 if x % 2 == 0 else x for x in numeros]
print("Números transformados:", transformados)

Por ejemplo, la excepción Exception es la clase base para la mayoría de las excepciones, y de ella derivan subclases como ArithmeticError y ValueError.

Comprender esta jerarquía es crucial para poder manejar las excepciones adecuadamente y elegir las excepciones específicas que se desean capturar.

A continuación se muestra un código que imprime la jerarquía de excepciones en Python:

def print_exception_hierarchy(exception_class, indent=0):
    print(' ' * indent + exception_class.__name__)
    for subclass in exception_class.__subclasses__():
        print_exception_hierarchy(subclass, indent + 4)

# Imprimir la jerarquía comenzando desde la clase base Exception
print_exception_hierarchy(Exception)

Este código utiliza recursión para recorrer y mostrar las subclases de excepciones, permitiéndote visualizar cómo están organizadas y relacionadas entre sí.

Entender la jerarquía de excepciones en Python es fundamental para escribir código robusto y manejable. Al conocer las relaciones entre las diferentes excepciones, puedes capturar errores de manera más específica, lo que te permite implementar manejadores de excepciones más precisos y efectivos.

Aportes 30

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

🟢 **Cómo levantar errores con 'raise'** En ciertas ocasiones necesitarás errores personalizados para tu programa. Para levantar una excepción o error puedes utilizar `raise` y seguido de la clase del error con un mensaje personalizado. Por ejemplo, creemos una función que evalúe la edad de un usuario no sea negativa y que no sea menor de edad. ```python def verificar_edad(edad): if edad < 0: raise ValueError("La edad no puede ser negativa") elif edad < 18: raise Exception("La persona es menor de edad") else: return "Edad válida" ``` Levantar excepciones hace que nuestro código más **explicativo de lo que debemos o no manejar**. ¡Nunca pares de aprender! 🚀🚀
Oigan estoy loco o esta clase no estaba antes, porque me la pase 🤣, solo ví la pasada que termina con código que te da las jerarquías Aquí como puedo hacerle para que ya se rompa el while ```python while True: try: divisor = int(input("Ingresa un numero divisor: ")) result = 100/divisor print(result) except ZeroDivisionError as e: print("ERROR: No se puede dividir entre 0") print("Ha ocurrido un error del tipo:", e) except ValueError as e: print("ERROR: Debes introducir cualquier numero que no sea cero") print("Ha ocurrido un error del tipo:", e) ```while True:    try:        divisor = *int*(input("Ingresa un numero divisor: "))        result = 100/divisor        print(result)    except *ZeroDivisionError* as e:        print("ERROR: No se puede dividir entre 0")        print("Ha ocurrido un error del tipo:", e)    except *ValueError* as e:        print("ERROR: Debes introducir cualquier numero que no sea cero")        print("Ha ocurrido un error del tipo:", e)
## **Manejo de Excepciones y Uso de Pass** El **manejo de excepciones** en Python se hace usando `try` y `except`, para que el programa no se detenga cuando ocurre un error. Cuando algo dentro de `try` genera un error, el flujo salta a `except`, donde puedes manejar el error. Errores comunes: * `SyntaxError`: Ocurre cuando hay un error en la escritura del código, como olvidar un paréntesis. No puedes manejarlo con `try-except` porque impide que el programa se ejecute. * `TypeError`: Sucede cuando tratas de hacer una operación con tipos de datos incompatibles, como sumar un número y una cadena. * `ZeroDivisionError`: Ocurre al intentar dividir entre cero. * `ValueError`: Sucede cuando el tipo de dato es correcto, pero el valor no es válido, como convertir una cadena no numérica en entero: * El uso de `pass` es simplemente para ignorar el error sin hacer nada.
Solución con bucle: while True: try: divisor = int(input("Ingresa un número divisor: ")) result = 100/divisor print(result) break except ZeroDivisionError: print("Error: El divisor no puede ser cero.") except ValueError: print("Error: Debes introducir un número válido.")
`def print_exception_hierarchy(exception_class, indent=0):` ` print(' ' * indent + exception_class.__name__)` ` for subclass in exception_class.__subclasses__():` ` print_exception_hierarchy(subclass, indent + 4)` `print_exception_hierarchy(Exception)`
![](https://static.platzi.com/media/user_upload/image-79875df5-feb2-4d87-987d-bc63003736fe.jpg)
esto parece magia, esta clase no la vi y ahora que reviso el curso esta
Aporte tomado de (https://docs.python.org/es/3/tutorial/errors.html) : La sentencia [`try`](https://docs.python.org/es/3/reference/compound_stmts.html#try) funciona de la siguiente manera. * Primero, se ejecuta la cláusula *try* (la(s) linea(s) entre las palabras reservadas [`try`](https://docs.python.org/es/3/reference/compound_stmts.html#try) y la [`except`](https://docs.python.org/es/3/reference/compound_stmts.html#except)). * Si no ocurre ninguna excepción, la cláusula *except* se omite y la ejecución de la cláusula [`try`](https://docs.python.org/es/3/reference/compound_stmts.html#try) finaliza. * Si ocurre una excepción durante la ejecución de la cláusula [`try`](https://docs.python.org/es/3/reference/compound_stmts.html#try), se omite el resto de la cláusula. Luego, si su tipo coincide con la excepción nombrada después de la palabra clave [`except`](https://docs.python.org/es/3/reference/compound_stmts.html#except), se ejecuta la *cláusula except*, y luego la ejecución continúa después del bloque try/except. * Si ocurre una excepción que no coincide con la excepción nombrada en la cláusula `except`, esta se pasa a las sentencias `try` externas; si no se encuentra un manejador, se trata de una excepción no manejada y la ejecución se detiene con un mensaje de error. El último punto quiere decir que cuando ocurre una excepción dentro de un bloque `try`, el programa busca un bloque `except` que pueda manejar ese tipo de excepción. Si la excepción que ocurre no coincide con la especificada en el `except`, la excepción se propaga hacia los bloques `try` externos (si los hay). Si, después de recorrer todos los bloques `try`, no se encuentra un manejador adecuado para la excepción, el programa finaliza con un mensaje de error, lo que se conoce como una **excepción no manejada**.
Para capturar múltiples errores en Python, puedes usar múltiples bloques `except` después de un bloque `try`. Por ejemplo: ```python try: # Código que puede causar excepciones result = 100 / divisor except ZeroDivisionError: print("El divisor no puede ser cero.") except ValueError: print("Debes introducir un número válido.") ``` También puedes capturar múltiples excepciones en un solo `except` usando una tupla: ```python try: # Código que puede causar excepciones result = 100 / divisor except (ZeroDivisionError, ValueError) as e: print(f"Ocurrió un error: {e}") ``` Esto permite manejar diferentes tipos de errores de manera efectiva, mejorando la robustez de tu código.
def fibonacci(n):    if n == 0:        return 0    else:        return n + fibonacci(n-1) number = 5 print(fibonacci(number))
En el contexto de Python, la letra que se usa para la variable en el manejo de excepciones en el bloque `except` puede ser cualquier letra o nombre de variable que decidas. Por ejemplo, en el caso de `ZeroDivisionError`, puedes usar cualquier letra como `e`, `f` o incluso nombres más descriptivos como `error`. Es una cuestión de preferencia personal y claridad en tu código. La clave es que sea coherente para facilitar la lectura y comprensión.
En el contexto de Python, la letra "e" al final de un error se utiliza para representar la excepción que se ha capturado. Por ejemplo, en un bloque `try...except`, puedes capturar la excepción y asignarla a una variable, como se muestra a continuación: ```python try: # Código que puede generar un error except ZeroDivisionError as e: print(f"Ha ocurrido un error: {e}") ``` Aquí, `e` almacena información sobre la excepción, permitiendo que puedas proporcionar un mensaje más detallado al usuario. Esto facilita la depuración y mejora la experiencia del usuario al manejar errores.
Exception ArithmeticError FloatingPointError OverflowError ZeroDivisionError AssertionError AttributeError BufferError EOFError ImportError ModuleNotFoundError ZipImportError LookupError IndexError KeyError CodecRegistryError MemoryError NameError UnboundLocalError OSError BlockingIOError ChildProcessError ConnectionError BrokenPipeError ConnectionAbortedError ConnectionRefusedError ConnectionResetError FileExistsError FileNotFoundError InterruptedError IsADirectoryError NotADirectoryError PermissionError ProcessLookupError TimeoutError UnsupportedOperation itimer\_error ReferenceError RuntimeError NotImplementedError RecursionError \_DeadlockError StopAsyncIteration StopIteration SyntaxError IndentationError TabError SystemError CodecRegistryError TypeError ValueError UnicodeError UnicodeDecodeError UnicodeEncodeError UnicodeTranslateError UnsupportedOperation Warning BytesWarning DeprecationWarning EncodingWarning FutureWarning ImportWarning PendingDeprecationWarning ResourceWarning RuntimeWarning SyntaxWarning UnicodeWarning UserWarning ExceptionGroup
```js def divide(a,b): # if b == 0: # print('No se puede realizar una división por 0') # return 'No definido' return a/b def printError(e): print('Ha ocurrido un error: ', e) try: num1 = float(input('Ingresa el primer número: ')) num2 = float(input('Ingresa el segundo número: ')) print(f'El resultado de la división es: {divide(num1, num2)}') except ZeroDivisionError as e: print('No se puede realizar una división por 0') printError(e) except ValueError as e: print('Opción no valida, intenta de nuevo') printError(e) ```
Hola Carli. Oye, van dos clases en lo que e avanzado del curso, en las cuales hablas de unos recursos, pero no encuentro la ruta para acceder a estos. ¿me puedes orientar por favor?.
Al principio coloque un nombre un poco diferente al except, y me daba error, como que no la reconocía (le estaba colocando ZeroDivisorError). Bueno, por si a alguien también se lo preguntó, ZeroDivisionError ya son clases para manejo de excepciones, que han sido construidas por Python, y que puedes reutilizarlas, por lo que querer colocar un nombre porque si, es probable que no funcione!
Buen curso gracias
![](https://static.platzi.com/media/user_upload/image-919817b6-a1a2-4013-b3ae-c19078fb1f95.jpg) Comparto mi código. Simplemente, se llama a una función, que suma dos números, pero sí recibe una letra. Por ejemplo, da el aviso de error y vuelve a dar inicio a la función sin parar la ejecución
```python try: divisor = int(input('Ingresa un numero divisor')) result = 100/divisor print(result) except ZeroDivisionError: print('Error: El divisol no puede ser cero') except ValueError: print('Error: Deves introducir un numero valido') while True: divisor = int(input('Ingresa un numero divisor')) ```try:            divisor = int(input('Ingresa un numero divisor'))    result = 100/divisor    print(result)except ZeroDivisionError:    print('Error: El divisol no puede ser cero')except ValueError:    print('Error: Deves introducir un numero valido')    while True:    divisor = int(input('Ingresa un numero divisor'))           
Manejo de Excepciones y Uso de Pass: Al poner pass después de algún bloque de código hace que el programa se salte ese bloque, es util cuando el programa marca errores para que se ejecute sin ejecutar el código Se puede asignar algún mensaje para que salga en terminal en lugar de uno de los errores por defecto que ya tiene la terminal haciendo uso de except: Ejemplo: Except ZeroDivisionError: print("No se puede dividir por 0") Se puede agregar esto a un conjunto de cierto tipo de errores, como los aritméticos Por ejemplo: ArithmeticError, que incluye el error de ZeroDivisionError y otros más
Si un método no puede manejar un error de forma efectiva, puede **lanzar** el error para que un método superior lo maneje. Este es el principio básico del manejo de excepciones en Python: dejar que los métodos superiores gestionen los errores cuando no pueden ser manejados en el nivel actual. ![](https://static.platzi.com/media/user_upload/image-7b6fad55-729a-4146-940e-88d0e4e7217a.jpg) Resumen raise te permite lanzar excepciones en un método y propagarlas hacia métodos superiores que las manejen. Si el método superior no captura la excepción, se propaga aún más hacia arriba (hacia la capa principal de ejecución). Puedes usar raise para hacer que un método "pase" los errores a otro método que pueda tener más contexto o más capacidades para manejar los errores.
Aquí dejo mi opción de como debería funcionar hasta que el usuario lo desee detener. ```python try: x = True while x == True: try: numero = int(input("\nPor favor ingresa un numero: ")) operacion = 12 / numero print(operacion) respuesta = str(input("\nEscriba [Y] para volver a ejecutar o presione cualquier otra letra Para detener: ")) x = True if respuesta == "Y" or respuesta == "y" else False except ZeroDivisionError as e: print("Error: A ocurrido un error de operacion") print(f"El error es: {e}") except ValueError as e: print("Error: A ocurrido un error con el valor ejecutado") print(f"El error es: {e}") except NameError as ex: print("Error: Problemas con alguna variable") print(f"El error es: {ex}") ```
def print\_exception\_hierarchy(exception\_class, indent=0): print(' ' \* indent + exception\_class.\_\_name\_\_) for subclass in exception\_class.\_\_subclasses\_\_(): print\_exception\_hierarchy(subclass, indent + 4) print\_exception\_hierarchy(Exception)
Es muy util esta parte porque esto evita que un programa colapse, por las genialidades del usuario final.
Los errores y las excepciones provocan un comportamiento inesperado o detienen la ejecución de un programa. Un error es un problema en un programa que impide que éste complete su tarea. En comparación, una excepción es una condición que interrumpe el flujo normal del programa. Tanto los errores como las excepciones son un tipo de error en tiempo de ejecución, lo que significa que se producen durante la ejecución de un programa. Entender la jerarquía de excepciones en Python es fundamental para escribir código robusto y manejable.
\*\*Uso de la Jerarquía:\*\* \> - Puedes capturar excepciones de nivel superior para manejar varios tipos de errores a la vez. \> - Ejemplo: \> ```python \> try: \> resultado = 10 / 0 \> except ArithmeticError: # Captura ZeroDivisionError y otros errores aritméticos. \> print("Ocurrió un error aritmético.") \> ```
Hay nuevos videos con contenidos excelentes 😲
que significaba el int
En Python, el manejo de excepciones se realiza utilizando bloques `try`, `except`, `else`, y `finally`. También, el uso de la palabra clave `pass` permite manejar situaciones excepcionales sin hacer nada, simplemente ignorando el error o condición. Aquí te explico ambos conceptos con ejemplos: \### 1. Manejo de Excepciones El manejo de excepciones permite capturar errores durante la ejecución de un programa, evitando que este se detenga de forma abrupta. La estructura básica es: ```python try: \# Código que puede lanzar una excepción except TipoDeExcepción: \# Código para manejar la excepción else: \# Código que se ejecuta si no ocurre ninguna excepción finally: \# Código que siempre se ejecuta (opcional) ``` \### Ejemplo de Manejo de Excepciones ```python try: numero = int(input("Introduce un número: ")) print(f"El número ingresado es: {numero}") except ValueError: print("Error: Debes introducir un número válido.") else: print("No ocurrió ninguna excepción.") finally: print("Finalizando la operación.") ``` \- \*\*try:\*\* Intenta ejecutar el código que puede generar una excepción. \- \*\*except:\*\* Captura la excepción `ValueError` (que ocurre cuando intentas convertir un valor no numérico a entero). \- \*\*else:\*\* Se ejecuta si no hay ninguna excepción. \- \*\*finally:\*\* Este bloque siempre se ejecuta, ocurra o no una excepción. \### 2. Uso de `pass` La palabra clave `pass` se utiliza para indicar que no se realizará ninguna acción en un bloque de código. Esto es útil cuando no deseas manejar la excepción de inmediato o cuando estás creando código de prueba. \### Ejemplo con `pass` ```python try: numero = int(input("Introduce un número: ")) except ValueError: pass # Ignora el error si ocurre un ValueError else: print(f"El número ingresado es: {numero}") ``` En este caso, si el usuario introduce un valor que no es un número, el programa no hará nada con el error y continuará ejecutándose sin mostrar un mensaje de error. \### Resumen: \- \*\*Manejo de Excepciones\*\*: Se utiliza `try` y `except` para capturar y manejar errores. \- \*\*`pass`\*\*: Permite ignorar errores o implementar código sin realizar ninguna acción específica cuando ocurre una excepción.
Aquí esta mi solución con bucle: ![](https://static.platzi.com/media/user_upload/code-3b5725c8-b159-4b1c-9ed1-d3ea63fc2df2.jpg)