Python y sus librerías es un ecosistema en continua evolución. Cada nueva versión de Python, o cualquiera de sus librerías, incluye nuevas características, mejoras de rendimiento y soluciona posibles errores. En la mayoría de los casos los cambios no afectan al funcionamiento del código existente, pero en otros casos si. Cuando se van a introducir cambios que pueden afectar al funcionamiento de las funciones, o como se deben llamar a estas, lo normal es incluir las advertencias conocidas como FutureWarning. En esta entrada, se analizará qué son los errores FutureWarning en Python y cómo abordarlos de manera efectiva.
Tabla de contenidos
Los mensajes FutureWarning en Python son advertencias que se emiten cuando se ejecuta unas características que están en desuso o que cambiarán en futuras versiones. Indicando a los desarrolladores que deben actualizar su código para prepararlo de cara a futuras versiones. Estos mensajes no detienen la ejecución del código, ya que no son un error sino una advertencia, y su única función es la de recordar los futuros cambios. A pesar de ello, es necesario tenerlos en cuenta cuando aparecen para evitar que los programas dejen de funcionar en una futura actualización de Python o la de librería que genera el mensaje.
Las advertencias FutureWarning se pueden clasificar en diferentes tipos de categorías.
Posiblemente el tipo de FutureWarning más habitual es la advertencia de obsolescencia de una función o un atributo. Lo que indica que una característica específica que se está usando en el código está en desuso. Cuando aparecen estos mensajes se recomienda actualizar el código tan pronto sea posible para usar la nueva sintaxis.
Por ejemplo, el siguiente mensaje indica que la función get_feature_names
ha pasado a estar obsoleta y se eliminará en una versión futura versión de Scikit-learn.
FutureWarning: Function get_feature_names is deprecated; get_feature_names is deprecated in 1.0 and will be removed in 1.2. Please use get_feature_names_out instead.
Para poder usar el código con scikit-learn 1.2 será necesario cambiar todas las llamadas a get_feature_names
por llamadas a get_feature_names_out
. Revisando la documentación de las funciones para adaptar las llamadas. Aunque esto no es gratis, como la función get_feature_names_out
se introdujo en la versión 1.0, al realizar el cambio no se podrá ejecutar el código actualizado en versiones previas. Por lo que será necesario informar a los usuarios de los que ya no será posible utilizar el código en versiones anteriores.
Otra opción es que el cambio se de en el un parámetro de la función, como el siguiente ejemplo.
FutureWarning: Attribute `affinity` was deprecated in version 1.2 and will be removed in 1.4. Use `metric` instead
En este caso, el parámetro affinity
desaparecerá en la versión 1.4 de Scikit-learn reemplazó por metric
. Al igual que el caso anterior es necesario cambiar la llamada a la función.
Mediante un mensaje FutureWarning también se puede indicar cambios en los valores predeterminados de los parámetros de funciones. El siguiente ejemplo es de scikit-learn.
FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning super()._check_params_vs_input(X, default_n_init=10)
Este mensaje indica que el valor por defecto actual de n_init
es 10, pero en la versión 1.4 pasará a ser 'auto'
. Aconsejando establecer explícitamente el valor de n_init
para suprimir la advertencia. A diferencia del caso anterior en este caso el código va a seguir funcionando cuando llegue la versión 1.4 de la librería, pero los resultados pueden cambiar ya que hay un cambio en un parámetro. Por lo que se debe seguir el consejo para evitar que en una futura versión el funcionamiento del programa cambie.
Los mensajes FutureWarning no son un problema inminente en Python, pero ignorarlos puede hacer que el código deje de funcionar en una actualización. Cuando se tiene un mensaje de este tipo es aconsejable seguir los siguientes pasos:
En algunos casos, se puede optar por suprimir temporalmente las advertencias si se está seguro de que el código es compatible y las actualizaciones no son necesarias de inmediato. Siendo algo que se debe hacer con extrema precaución y documentando claramente el motivo. Si el código no es compatible y se ignora el mensaje en código dejará de funcionar en un futuro.
Para realizar una supresión selectiva de los mensajes se puede usar el siguiente código.
import warnings # Suprimir la advertencia específica warnings.filterwarnings("ignore", category=FutureWarning, module="nombre_de_la_biblioteca")
En donde se debe reemplazar “nombre_de_la_biblioteca” por el nombre de la librería de la que se desea anular los mensajes.
Los mensajes FutureWarning se pueden lanzar desde cualquier librería o función escrita en Python. De hecho, es aconsejable usarlos cuando se planea realizar un cambio que puede afectar al funcionario de esta en una futura versión. Facilitando a los usuarios el cambio entre versiones. Para ello solamente se tiene que importar el módulo warnings y lanzar una warnig con FutureWarning
como segundo parámetro. Un ejemplo básico de esto sería el que se muestra a continuación.
import warnings def deprecated_function(): # Emitir una advertencia de depreciación warnings.warn("La función 'deprecated_function' está obsoleta y será eliminada en la próxima versión.", FutureWarning) # Resto del código de la función... deprecated_function()
FutureWarning: La función 'deprecated_function' está obsoleta y será eliminada en la próxima versión. warnings.warn("La función 'deprecated_function' está obsoleta y será eliminada en la próxima versión.", FutureWarning)
Los errores FutureWarning en Python son un recordatorio de la evolución constante del ecosistema. Al que es necesario adaptarse para disfrutar de las últimas novedades y mejoras. Los desarrolladores que abordan estas advertencias de manera proactiva pueden mantener el código actualizado y asegurar la compatibilidad con las futuras versiones. La clave radica en comprender la naturaleza de la advertencia, actualizar el código en consecuencia y realizar pruebas exhaustivas para garantizar un código robusto y sin problemas.
Imagen de Pete Linforth en Pixabay
En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…
En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…
El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…
En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…
¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…
En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…
This website uses cookies.