Python

¿Qué son y cómo manejar los errores FutureWarning en Python?

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.

¿Qué es un FutureWarning en Python?

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.

Tipos comunes de FutureWarning

Las advertencias FutureWarning se pueden clasificar en diferentes tipos de categorías.

Advertencia de obsolescencia

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.

Cambio en el valor predeterminado

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.

Consejos para gestionar los errores FutureWarning en Python

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:

  1. Leer la documentación: Antes de realizar cambios en el código se debe consultar a la documentación para comprender la razón detrás del FutureWarning. Lo que proporcionará la información necesaria sobre la nueva sintaxis o función.
  2. Actualiza el código: Una vez comprendida la naturaleza de la advertencia, actualiza el código en base a las recomendaciones. Aprovechando la ocasión para mejorar y optimizar el código.
  3. Realizar pruebas exhaustivas: Después de aplicar los cambios será necesario realizar pruebas exhaustivas para asegurar que el código actualizado funcione como se espera. Algo crucial para evitar posibles problemas cuando se ponga en producción.

Supresión selectiva de los FutureWarning

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.

Lanzar FutureWarning es librerías propias

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)

Conclusiones

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

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

19 horas ago

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…

6 días ago

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…

1 semana ago

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…

2 semanas ago

Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso

¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…

2 semanas ago

Curiosidad: La Paradoja de Simpson, o por qué no siempre debes fiarte de los promedios

En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…

3 semanas ago

This website uses cookies.