contrôler des exceptions
Effectuer une analyse statique limitée pour les exceptions non apprises dans un fichier python.
C'est un ️ Vider ️ . Découvrez le comportement testé, le comportement non testé et les limitations.
Usage
Pour vérifier les exceptions non revues dans un fichier python:
python3 main.py [filename]
La prise en charge des fichiers multiples est limitée, mais vous pouvez essayer ceci:
python3 main.py <(cat [file1] [file2]...)
Comportement testé
Le comportement suivant a été vérifié pour les fichiers de test inclus Tests / test.py et tests / test2.py:
- Détecte les exceptions soulevées manuellement par les fonctions (
raise Exception ). - Détecte les exceptions soulevées par l'appel des fonctions à l'extérieur des blocs d'essai, y compris les fonctions définies par l'utilisateur qui soulèvent des exceptions, ainsi que certaines fonctions Python intégrées comme
open() . - Détecte les exceptions soulevées en utilisant des opérateurs comme l'indexation
arr[index] et la division a / b ou a // b . - Exclut les exceptions prises dans
except Exception: les clauses du rapport et comprend la hiérarchie des exceptions. - Exclut les exceptions documentées dans les docstrings de fonction du rapport.
Comportement non testé
- Peut échouer avec des blocs d'essai / sauf imbriqués.
- Des tests plus approfondis doivent être effectués pour détecter des limitations supplémentaires.
Limites
- Manqueront beaucoup d'exceptions:
- Étant donné que Python est un langage dynamique avec le typage du canard, il existe de nombreuses exceptions qui ne peuvent pas être détectées statiquement.
- Les exceptions soulevées par les fonctions les plus populaires sont sans papiers et donc non visibles de l'extérieur.
- Les exceptions sont stockées par nom. S'il y a plusieurs
TypeError dans une fonction, seule la dernière sera signalée.
- Rapportera des exceptions même si elles ne seront jamais soulevées en exécution:
- En raison de son outil d'analyse statique, il ne suit pas de variable le long du code ni ne détermine ses valeurs possibles.
- C'est pourquoi, des exceptions seront signalées pour toute opération d'indexation ou de division, qu'elles soient "sûres" ou non.
- Ne fonctionne pas bien avec les cours ou les exceptions personnalisées:
- Il peut y avoir de nombreuses classes dans un seul document avec des méthodes dans différentes classes partageant le même nom.
- Il existe de nombreuses façons d'instancier une classe et d'appeler ses méthodes.
- Il est, dans certains cas, impossible de déterminer la classe d'une variable et la fonction appelée analyse statique.
- Ne prend pas en charge les bibliothèques externes:
- Les bibliothèques externes ne sont pas prises en charge, mais le code est suffisamment extensible pour les inclure à l'avenir.
- La prise en charge de plusieurs fichiers est limitée:
- La prise en charge de plusieurs fichiers se fait via la substitution de processus bash.
python3 main.py <(cat [file1] [file2]...) - Les numéros de ligne seront relatifs aux fichiers fusionnés et non par fichier.
- Les fonctions sont recherchées par le nom, donc les fonctions renommées
from <module> import <function> as <new_name> ne seront pas détectées.