{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "lH5atlApfMaN" }, "source": [ "# Invocación de excepciones" ] }, { "cell_type": "markdown", "metadata": { "id": "ISbDugc-fMaP" }, "source": [ "Con este primer código simplemente queremos comprobar que:\n", "* sí una función lleva argumentos y no se le pasa ninguno dará un error." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "yw3nlcI6fMaQ" }, "outputs": [], "source": [ "def fun(x):\n", " pass\n", "\n", "fun() # da error al pasar un número de argumentos distinto al esperado" ] }, { "cell_type": "markdown", "metadata": { "id": "04w-GG3qfMaS" }, "source": [ "## Tratando un error con un ```if```\n", "En un primer paso vamos a mostrar un mensaje informando que no se puede invocar una función sin pasarle un argumento cuando éste es requerido." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "9E9FFZ9SfMaT" }, "outputs": [], "source": [ "def funcion(x=None):\n", " if x is None:\n", " print(\"ERROR: no se permite un valor nulo.\")\n", " else:\n", " print(\"Todo correcto.\")\n", "\n", "funcion(\"Hola\") # si como argumento pasamos un string vemos que funciona correctamente" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "MgSqMIdafMaU" }, "outputs": [], "source": [ " funcion(34) # si como argumento pasamos un número vemos que funciona correctamente" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "GVxt-SsgfMaV" }, "outputs": [], "source": [ "funcion() # si no existe argumento salta el error" ] }, { "cell_type": "markdown", "metadata": { "id": "_xippo-QfMaW" }, "source": [ "## ```raise``` invocar un error\n", "El error que creamos es un error específico que nosotros elegimos. \n", "Vamos a lanzar un ValueError con el mensaje que nosotros queremos. \n", "ValueError: ERROR: no se permite un valor nulo.\n", "\n", "Sustituimos el print por un ```raise``` que nos permite invocar un error concreto.\n", "\n", "Al ejecutar la función sin pasarle ningún argumento se producirá un error forzado de forma manual de tipo ValueError y con el mensaje que nosotros hemos querido." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "FkoBSjFpfMaX" }, "outputs": [], "source": [ "def su_funcion(x=None):\n", " if x is None:\n", " raise ValueError(\"ERROR: no se permite un valor nulo.\") # Creamos y lanzamos nosotros un ValueError\n", " else:\n", " print(\"Todo correcto.\")\n", "\n", "su_funcion() # si no existe argumento salta el error" ] }, { "cell_type": "markdown", "metadata": { "id": "cpp-EuMIfMaY" }, "source": [ "### Podemos capturar el error generado con una excepción\n", "Se trata del valor de error que específicamente hemos generado nosotros y al que añadimos una excepción." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "ulMy-sFXfMaZ" }, "outputs": [], "source": [ "def su_funcion(x=None):\n", " try:\n", " if x is None:\n", " raise ValueError(\"ERROR: no se permite un valor nulo.\") # Creamos y lanzamos nosotros un ValueError\n", " else:\n", " print(\"Todo correcto.\")\n", " except ValueError:\n", " print(\"Puede corregir este ERROR introduciendo un argumento al invocar la función.\") #mensaje lanzado desde la excepción\n", "\n", "su_funcion() # si no existe argumento salta el error" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "colab": { "name": "0750_invocacion_de__excepciones.ipynb", "provenance": [], "include_colab_link": true } }, "nbformat": 4, "nbformat_minor": 0 }