CursosEmpresasBlogLiveConfPrecios

Excepciones y control de flujo

Clase 29 de 31 • Curso de Introducción al Pensamiento Computacional con Python

Contenido del curso

Introducción al pensamiento computacional

  • 1
    Introducción al pensamiento computacional

    Introducción al pensamiento computacional

    02:26 min
  • 2
    Introducción al cómputo

    Introducción al cómputo

    15:39 min
  • 3
    Introducción a los lenguajes de programación

    Introducción a los lenguajes de programación

    09:25 min

Introducción a Python

  • 4
    Preparación de tu computadora

    Preparación de tu computadora

    01:16 min
  • 5
    Elementos básicos de Python

    Elementos básicos de Python

    10:38 min
  • 6
    Asignación de variables

    Asignación de variables

    06:06 min
  • 7
    Cadenas y entradas

    Cadenas y entradas

    14:12 min
  • 8
    Programas ramificados

    Programas ramificados

    11:36 min
  • 9
    Iteraciones

    Iteraciones

    09:11 min
  • 10
    Bucles for

    Bucles for

    03:48 min

Programas numéricos

  • 11
    Representación de flotantes

    Representación de flotantes

    03:45 min
  • 12
    Enumeración exhaustiva

    Enumeración exhaustiva

    07:20 min
  • 13
    Aproximación de soluciones

    Aproximación de soluciones

    12:45 min
  • 14
    Búsqueda Binaria

    Búsqueda Binaria

    10:34 min

Funciones, alcance y abstracción

  • 15
    Funciones y abstracción

    Funciones y abstracción

    09:12 min
  • 16
    Scope o Alcance

    Scope o Alcance

    10:00 min
  • 17
    Especificaciones del código

    Especificaciones del código

    05:26 min
  • 18
    Recursividad

    Recursividad

    11:06 min
  • 19
    Fibonnacci y la Recursividad

    Fibonnacci y la Recursividad

    01:10 min

Tipos estructurados, mutabilidad y funciones de alto nivel

  • 20
    Funciones como objetos

    Funciones como objetos

    01:40 min
  • 21
    Tuplas

    Tuplas

    08:09 min
  • 22
    Rangos

    Rangos

    07:35 min
  • 23
    Listas y mutabilidad

    Listas y mutabilidad

    14:00 min
  • 24
    Diccionarios

    Diccionarios

    06:56 min

Pruebas y debugging

  • 25
    Pruebas de caja negra

    Pruebas de caja negra

    11:50 min
  • 26
    Pruebas de caja de cristal

    Pruebas de caja de cristal

    07:45 min
  • 27
    Debugging

    Debugging

    09:56 min

Excepciones y afirmaciones

  • 28
    Manejo de excepciones

    Manejo de excepciones

    07:05 min
  • 29
    Excepciones y control de flujo

    Excepciones y control de flujo

    Viendo ahora
  • 30
    Afirmaciones

    Afirmaciones

    04:36 min
  • 31
    Conclusiones

    Conclusiones

    02:33 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Hasta ahora hemos visto como las excepciones nos permiten controlar los posibles errores que pueden ocurrir en nuestro código. Sin embargo, dentro de la comunidad de Python tienen otro uso: control de flujo.

      En este momento ya debes estar familiarizado con las estructuras de control flujo que ofrece Python (if... elif...else); entonces, ¿por qué es necesaria otra modalidad para controlar el flujo? Una razón muy específica: el principio EAFP (easier to ask for forgiveness than permission, es más fácil pedir perdón que permiso, por sus siglas en inglés).

      El principio EAFP es un estilo de programación común en Python en el cual se asumen llaves, índices o atributos válidos y se captura la excepción si la suposición resulta ser falsa. Es importante resaltar que otros lenguajes de programación favorecen el principio LBYL (look before you leap, revisa antes de saltar) en el cual el código verifica de manera explícita las precondiciones antes de realizar llamadas.

      Veamos ambos estilos:

      # Python def busca_pais(paises, pais): """ Paises es un diccionario. Pais es la llave. Codigo con el principio EAFP. """ try: return paises[pais] except KeyError: return None
      // Javascript /** * Paises es un objeto. Pais es la llave. * Codigo con el principio LBYL. */ function buscaPais(paises, pais) { if(!Object.keys(paises).includes(pais)) { return null; } return paises[pais]; }

      Como puedes ver, el código de Python accede directamente a la llave y únicamente si dicho acceso falla, entonces se captura la excepción y se provee el código necesario. En el caso de JavaScript, se verifica primero que la llave exista en el objeto y únicamente con posterioridad se accede.

      Es importante resaltar que ambos estilos pueden utilizarse en Python, pero el estilo EAFP es mucho más "pythonico".

      Comentarios

        Rafael Carpio

        Rafael Carpio

        student•
        hace 6 años

        Siento que acá todos son expertos, yo tengo que leer las cosas unas 5 veces para entender un poco de lo que habla. Son palabras que literalmente se que dice, pero no hay una figura imaginativa en mi cerebro, esta totalmente en blanco.

          Nicolás Ponce Vera

          Nicolás Ponce Vera

          student•
          hace 6 años

          Así empieza la curva de aprendizaje para cualquier tema nuevo. Estoy en la misma situación pero por experiencias pasadas sé que se vuelve más sencillo con la práctica. Ánimo!

          Ivan Ezequiel Mazzalay

          Ivan Ezequiel Mazzalay

          student•
          hace 6 años

          Tranquilo Rafael, nos ha pasado a todos.. yo hace un par de años que empecé a meterme al tema del software por mi cuenta pero nunca pude dedicarme realmente como ahora y te puedo asegurar que he aprendido un montón, he tenido dudas y he tenido por ahí que recurrir a otras fuentes o al lápiz y al papel mas de una vez.. ánimos, a no bajar los brazos que con tiempo, estudio y práctica todo se aprende. Qué es lo que no entiendes? Comentame así te ayudo a entenderlo.

        Gustavo Ulises Lira Reyes

        Gustavo Ulises Lira Reyes

        student•
        hace 6 años

        Intente hacer un poco más dinámica esta parte e implementar lo que ha habiamos visto de diccionarios espero les sirva, aún me faltan implementar algunas cosas.

        anime = { 'Shounen': 'Naruto', 'Mecha': 'Zoids', 'Vampiros': 'Hellsing', 'Espacio': 'Terra formars', 'Demonios': 'Kimetsu no Yaiba', 'Deportes': 'Capitan Tsubasa', 'Comedia': 'Ranma 1/2', 'Romance': 'Kimi no na wa', } def buscar_en_diccionario(diccionario,llave): try: return print(diccionario[llave]) except KeyError as e: print(e) return (f'{llave} no se encontro en el diccionario') def actualizar_genero_diccionario(diccionario,llave,valor): diccionario.update({llave:valor}) return print(f'El diccionario ha sido actualizado \nLos generos son: {diccionario.keys()}') def eliminar_valor_de_un_genero(diccionario,llave): try: diccionario_temp = {k:('Sin valor de llave' if diccionario.get(llave)==v else v) for k,v in diccionario.items()} diccionario.update(diccionario_temp) return print(f'Hola {diccionario.values()}') except NameError as e: print(e) return print(f'{llave} incorrecta') def manipular_dict(diccionario): print(f'Animes disponibles: {diccionario.values()}') print('Menu \n1. Buscar genero \n2. Actualizar Genero y anime \n3. Eliminar una anime') seleccion_menu = int(input('Seleccione un número del menu: ')) if seleccion_menu == 1: llave = str(input('Seleccione genero que desea buscar: ')) llamar_funcion = buscar_en_diccionario(diccionario,llave) return manipular_dict(diccionario) elif seleccion_menu ==2: llave = str(input('Seleccione genero que desea agregar: ')) valor = str(input('Seleccione anime que desea agregar al genero: ')) llamar_funcion = actualizar_genero_diccionario(diccionario,llave,valor) return manipular_dict(diccionario) elif seleccion_menu == 3: llave = str(input('Seleccione genero del anime que desea eliminar: ')) llamar_funcion = eliminar_valor_de_un_genero(diccionario,llave) return manipular_dict(diccionario) else: print('No se encontró número en el menu') return manipular_dict(diccionario) x = manipular_dict(anime)
          Pablo Andres Onofre Riascos

          Pablo Andres Onofre Riascos

          student•
          hace 6 años

          Intentar hacer el mismo programa con switch(maneja menor las opciones) y te quedara perfecto, gracias compañero.

          Andres Felipe Noguera Escandon

          Andres Felipe Noguera Escandon

          student•
          hace 6 años

          muy interesante.

        Manuel Alejandro Hermoso

        Manuel Alejandro Hermoso

        student•
        hace 6 años

        Digamos que en un buffet

        buffetlibre.png

        El principio EAFP

        • Cada uno se sirve su ración y se confía que solo agarres un postre

        El principio LBYL

        • Te sirven solo una ración de postre y punto.
          Isay Humberto Lucas Hernandez

          Isay Humberto Lucas Hernandez

          student•
          hace 6 años

          Creo que la analogía del buffet se aleja un poco del significado de EAFP y LBYL.

          Estos estilos permiten "asumir" que un error podría ocurrir. En este caso, al buscar con una llave un valor en un diccionario/objeto.

          Por ejemplo, asumiendo que el diccionario/objeto tiene 150 elementos (enumerados del 1 al 150) y por "accidente" se envía un 9999, la función está preparada para decir "Oye viejo, tu llave está muy bonita y todo pero no tengo un valor de país con dicha llave"; a simplemente dejar de funcionar.

          **Es más fácil pedir perdón: **(Desarrollador porque agregaste esa excepción?! Pero bueno, nos salvó el día tu suposición)

          A pedir permiso: (Oiga jefecito, me da chance de escribir este control de excepción? :( ).

          Saludos!

          Manuel Alejandro Hermoso

          Manuel Alejandro Hermoso

          student•
          hace 6 años

          Interesante, me dejas pensando como lo podría aplicar a buffet :)

        Braulio Alberto Bueno Pabon

        Braulio Alberto Bueno Pabon

        student•
        hace 5 años

        EAFP:

        try: x = my_dict["key"] except KeyError: # handle missing key

        LBYL:

        if "key" in my_dict: x = my_dict["key"] else: # handle missing key

        La versión LBYL tiene que buscar la clave dentro del diccionario dos veces y también podría considerarse un poco menos legible.

          Lorenzo Enrique Piñango Cerezo

          Lorenzo Enrique Piñango Cerezo

          student•
          hace 5 años

          Gracias :)

        Wilson Delgado

        Wilson Delgado

        student•
        hace 6 años

        Para complementar https://www.youtube.com/watch?v=ph1DuXvTrIw

          José Contreras

          José Contreras

          student•
          hace 4 años

          Gracias bro!

          Marcos Monteverde

          Marcos Monteverde

          student•
          hace 3 años

          gracias

        Carmen Sánchez Salgado

        Carmen Sánchez Salgado

        student•
        hace 6 años

        Pythonico!

        exptions_EAFP.png
          Juan Manuel Roa Mejia

          Juan Manuel Roa Mejia

          student•
          hace 6 años

          Hola Carmen, espero te encuentres muy bien.

          Me parece curioso tu código ya que noté que usaste el estilo EAFP para la función busca_pais() y también usaste implícitamente el estilo LBYL para poder imprimir el retorno.

          Gran ejemplo para entenderlo :D

        ALDO MATUS MARTINEZ

        ALDO MATUS MARTINEZ

        student•
        hace 5 años

        Script completo EAFP en Python :snake: :smiley:

        def busca_pais(paises, pais): """ Paises es un diccionario. País es la llave. Código con el principio EAFP. """ try: return paises[pais] except KeyError: return None def run(): paises = { 'Mexico':1, 'Argentina':2, 'Colombia':3 } pais = input('Ingrese su pais: ') print(busca_pais(paises, pais)) if __name__ == '__main__': run()
          Mauricio Obe

          Mauricio Obe

          student•
          hace 5 años

          le falto una coma al 3 me sirvio para practicar tu codigo, gracias!

          ALDO MATUS MARTINEZ

          ALDO MATUS MARTINEZ

          student•
          hace 5 años

          Me alegra esa es la intención, poder ayudar :smiley:

        Esteban Ramírez García

        Esteban Ramírez García

        student•
        hace 5 años

        Como dice la info, el estilo EAFP es más pythonico, sin embargo, para efectos de ilustración creo que esto podría servir

        EAFP

        try: return paises[pais] except KeyError: return None

        LBYL

        if pais not in paises.keys(): return None return paises[pais]

        En LBYL, en la función built-in de los diccionarios llamada "keys" se obtiene un iterador, donde se evalúa si existe o no el key, cabe destacar, que en esta implementación me basé en el código escrito en JavaScript.

          Esteban Ramírez García

          Esteban Ramírez García

          student•
          hace 5 años

          Cuando digo "donde se valúa si existe o no el key", me refiero a esta implementación del método en el if que se puede observar, no me refiero a que la función realiza la evaluación.

        Juan David Cepeda López

        Juan David Cepeda López

        student•
        hace 5 años

        Python es muy elegante, se tenia que decir y se dijo.

          Daniel Libardo Diaz Gonzalez

          Daniel Libardo Diaz Gonzalez

          student•
          hace 5 años

          De acuerdo!

          Carlos Iván Cortés Cruz

          Carlos Iván Cortés Cruz

          student•
          hace 5 años

          Ohh siii

        Arturo Baduna

        Arturo Baduna

        student•
        hace 6 años

        EAFP es in ingles(es mas fácil pedir perdón que pedir permiso) es mas pythonico LBYL revisa antes de salta jastripeico python es un adolescente audaz mientras a java es un viejo precavido

          Edgar Norbey Usnas Jambuel

          Edgar Norbey Usnas Jambuel

          student•
          hace 6 años

          Me quedo mas claro con este comentario :)

          Daniel Alejandro Cumaco Robayo

          Daniel Alejandro Cumaco Robayo

          student•
          hace 6 años

          Java es horrible, mas feo que C jajaja

        Nicolás Cabrera

        Nicolás Cabrera

        student•
        hace 6 años

        Me parece mucho mas fácil el estilo EAFP, punto para Python 😂😂

          Alejandro Barrios

          Alejandro Barrios

          student•
          hace 6 años

          realmente en Javascript el codigo no esta mal, pero parece hecho por alguien no especializado en javascript. la representacion real seria algo asi:

          function buscaPais(paises, pais) { return paises[pais] }

          si el pais existe, lo retorna, de lo contrario devuelve null.

          Alejo Lemos

          Alejo Lemos

          student•
          hace 3 años

          es verdad Alejandro me parecio muy raro ese codigo en js jajajaja

        Jose Ramon Moreno Sanchez

        Jose Ramon Moreno Sanchez

        student•
        hace 5 años

        pythonico :)

        DAVID LEONARDO ALFONSO BENAVIDES

        DAVID LEONARDO ALFONSO BENAVIDES

        student•
        hace 5 años

        jajajaja es más fácil pedir perdón que permiso

        Elmer Padilla Espinoza

        Elmer Padilla Espinoza

        student•
        hace 5 años

        Me gusto el uso de la palabra "pythonico"

        David Jonatan Mora Bejarano

        David Jonatan Mora Bejarano

        student•
        hace 5 años

        yo soy programador de C# se me hace más natural el estilo de LBYL

        Carli Code

        Carli Code

        teacher•
        hace 6 años

        Grace Hopper _ «Si es una buena idea, continuad y llevadla a término. Es mucho más fácil pedir disculpas que conseguir el permiso necesario»_

        Diego Astudillo

        Diego Astudillo

        student•
        hace 5 años

        pregunta para puntos

          Leandro Tenjo

          Leandro Tenjo

          student•
          hace 5 años

          Realmente quiere preguntar algo?

          O solo intenta subir el platzi rank?

          . De ser así, es mucho fácil otras cosas como

          • Generar aportes de valor que hagan que la gente de like
          • Hacer una pregunta interesante que habrá un debate sobre el tema
          • Hacer un tutorial o un porte
          • Tomar los exámenes de los cursos y las rutas

          … En cada una de las clases vi la misma “pregunta”, (comentario diría yo) Hay muchas formas. Pero el spam solo te da mala imagen.

          Abril Rios

          Abril Rios

          student•
          hace 4 años

          Realmente si queres subir puntos hacelo sin trampa además el único perjudicado a la larga serás vos. 😐

        Luis Fernando Pedroza Taborda

        Luis Fernando Pedroza Taborda

        student•
        hace 6 años

        La verdad no conocia sobre este estilo de programacion, Python esta lleno de sorpresas.

        Gerson Montenegro

        Gerson Montenegro

        student•
        hace 6 años

        Quise emular la implementacion en JS del estilo LBYL usando la librería pydash (se instala con un pip install pydash desde la consola), y el código terminó así:

        # LBYL style import pydash def buscaPais(paises, pais): result = pydash.objects.find_key(paises, lambda p: p == pais) return result print(f'LBYL style: {buscaPais(paises, "NombrePais")}')
          Brandy Luis Lopez Pacheco

          Brandy Luis Lopez Pacheco

          student•
          hace 6 años

          Excelente!

        Clayton Jhordan Iliquin Zavaleta

        Clayton Jhordan Iliquin Zavaleta

        student•
        hace 5 años

        Por favor si alguien me lo podría explicar de una mejor manera, leí los comentarios en los que trataban de explicarlo pero aún no me queda claro. Lo que entendí es algo así maso menos: ++ - EAFP( pedir permiso antes que disculpas) ++ Analiza todas las opciones y luego si no la encuentra manda una clave de error, si no hay error arroja la respuesta.

        ++ - LBYL(revisa antes de saltar) ++ En primer lugar verifica si encuentra el valor pedido en la busqueda, ahí salta el error, pero si verifica que esta el valor buscado ahí pasa a la otra condicional y arroja el resultado.

          Marisol Catari Choquehuanca

          Marisol Catari Choquehuanca

          student•
          hace 5 años

          Clayton: Mi explicación en palabras simples, veamos si te resulta más sencillo.

          • EAFP --> hago lo que tengo que hacer, proceso lo que tenga que procesar, y si veo que hay un dato/valor/cálculo que genera excepción, entonces lo manejo
          • LBYL --> primero me aseguro que no pase algún dato/valor/cálculo que genere excepción, si es así manejo la excepción. Luego de eso hago lo que tengo que hacer, proceso lo que tenga que procesar.

          En ambos casos, no hay obligatoriedad de usarlos, solamente son 'estilos' saludables para manejar excepciones.

          Ignacio Crespo

          Ignacio Crespo

          student•
          hace 5 años

          Gracias @marisolcatari por la explicación! Yo también tenía la misma duda :D