Una biblioteca de terceros (escrita en C) que uso en mi código Python está emitiendo advertencias. Quiero poder usar la try exceptsintaxis para manejar adecuadamente estas advertencias. ¿Hay alguna forma de hacer esto?
                    
                        python
                                exception
                                exception-handling
                                warnings
                                
                    
                    
                        Boris Gorelik
fuente
                
                fuente

warnings.filterwarningshace exactamente lo que quieres, no entiendo cuál es tu problema?warnings.filterwarnigns('error')hace el trabajo. No puedo encontrar la respuesta original que propuso esta soluciónRespuestas:
Para citar del manual de Python ( 27.6.4. Advertencias de prueba ):
fuente
tryexceptsintaxis.fnxdevuelve algo, conserva ese resultado (y aún puede administrar la advertencia).fxn()no devuelva una advertencia,whabrá una lista vacía. Siwes una lista vacía (es decir[]), a continuación, ejecutar el código le dará el siguiente error:IndexError: list index out of range. Si solo está buscando formatear o verificar las propiedades de las advertencias capturadas, entonces es mejor usar un bucle for:for x in w: print(f'{x.category.__name__}: {str(x.message)}')Para manejar las advertencias como errores, simplemente use esto:
Después de esto, podrá detectar las mismas advertencias que los errores, por ejemplo, esto funcionará:
PD Agregó esta respuesta porque la mejor respuesta en los comentarios contiene errores ortográficos: en
filterwarnignslugar defilterwarnings.fuente
filterwarningsllamada para capturarWarnings, al menos en Python 3. simplemente funciona.Si solo desea que su secuencia de comandos falle en las advertencias, puede usar:
fuente
Aquí hay una variación que aclara cómo trabajar solo con sus advertencias personalizadas.
fuente
En algunos casos, es necesario utilizar ctypes para convertir las advertencias en errores. Por ejemplo:
fuente
warnings.simplefilter('error'), no obtendrá el rastreo de la advertencia que vio en los registros, sino que obtendrá los rastreos de las advertencias previamente filtradas. El usosimplefiltertambién es la forma más rápida de llegar a su respuesta si tiene alguna invocación de CLI.