excepción-control
Realice un análisis estático limitado para las excepciones no capturas en un archivo de Python.
Este es un ️ Ceñudo ️ . Consulte el comportamiento probado, el comportamiento no probado y las limitaciones.
Uso
Para verificar las excepciones no capturas en un archivo de Python:
python3 main.py [filename]
El soporte de múltiples archivos es limitado, pero puede probar esto:
python3 main.py <(cat [file1] [file2]...)
Comportamiento probado
El siguiente comportamiento se ha verificado para las pruebas de prueba incluidos Tests/test.py y tests/test2.py:
- Detecta excepciones planteadas manualmente por funciones (
raise Exception ). - Detecta las excepciones planteadas al llamar a las funciones fuera de los bloques Try-Except, incluidas las funciones definidas por el usuario que aumentan las excepciones, así como algunas funciones de Python incorporadas como
open() . - Detecta excepciones planteadas mediante el uso de operadores como indexación
arr[index] y dividir a / b o a // b . - Excluye las excepciones atrapadas en
except Exception: las cláusulas del informe y comprende la jerarquía de excepciones. - Excluye excepciones documentadas en las documentos de funciones del informe.
Comportamiento no probado
- Puede fallar con try anidados/excepto bloques.
- Se deben realizar pruebas más extensas para detectar limitaciones adicionales.
Limitaciones
- Perderá muchas excepciones:
- Debido a que Python es un lenguaje dinámico con tipificación de pato, hay muchas excepciones que no se pueden detectar estáticamente.
- Las excepciones planteadas por las funciones más populares son indocumentadas y, por lo tanto, no son visibles desde el exterior.
- Las excepciones se almacenan por nombre. Si hay múltiples
TypeError en una función, solo se informará el último.
- Informará excepciones incluso si nunca se plantearán en la ejecución:
- Debido a que es una herramienta de análisis estático, no sigue una variable a lo largo del código ni determina sus posibles valores.
- Es por eso que se informarán excepciones para cualquier operación de indexación o división, independientemente de si están "seguros" o no.
- No funciona bien con clases o excepciones personalizadas:
- Puede haber muchas clases en un solo documento con métodos en diferentes clases que comparten el mismo nombre.
- Hay muchas formas de instanciar una clase y llamar a sus métodos.
- Es, en algunos casos, imposible determinar la clase de una variable y la función llamada usando análisis estático.
- No admite bibliotecas externas:
- Las bibliotecas externas no están respaldadas, pero el código es lo suficientemente extensible como para que sea posible incluirlas en el futuro.
- El soporte para múltiples archivos es limitado:
- El soporte para múltiples archivos se realiza a través de la sustitución del proceso BASH.
python3 main.py <(cat [file1] [file2]...) - Los números de línea serán relativos a los archivos fusionados y no por archivo.
- Las funciones se buscan por nombre, por lo que no se detectarán funciones renombradas
from <module> import <function> as <new_name> .