Validation à l'exécution
Qu'est-ce que la validation à l'exécution?
La validation à l'exécution garantit que les signatures de méthode sont respectées pendant l'exécution du programme, détectant dynamiquement les erreurs liées aux types.
graph TD
A[Runtime Validation] --> B[Type Checking]
A --> C[Parameter Validation]
A --> D[Error Handling]
Mise en œuvre de la validation à l'exécution
Vérification manuelle des types
def validate_user(name: str, age: int) -> dict:
if not isinstance(name, str):
raise TypeError("Name must be a string")
if not isinstance(age, int):
raise TypeError("Age must be an integer")
return {"name": name, "age": age}
Bibliothèques de validation à l'exécution populaires
Bibliothèque |
Fonctionnalités |
Complexité |
typeguard |
Vérification complète des types |
Moyenne |
pydantic |
Validation des données |
Élevée |
enforce |
Vérification simple des types |
Faible |
Techniques de validation avancées
Validation basée sur des décorateurs
from functools import wraps
def validate_types(*types, **type_kwargs):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
## Validate input types
for arg, expected_type in zip(args, types):
if not isinstance(arg, expected_type):
raise TypeError(f"Expected {expected_type}, got {type(arg)}")
return func(*args, **kwargs)
return wrapper
return decorator
@validate_types(str, int)
def create_user(name, age):
return {"name": name, "age": age}
Stratégies de validation à l'exécution
- Vérification des types
- Validation de la plage de valeurs
- Application de contraintes personnalisées
- Gestion des erreurs
- La validation à l'exécution ajoute une surcharge
- Utilisez-la avec modération dans le code critique pour les performances
- Considérez des alternatives de vérification statique des types
Exemple de gestion des erreurs
def process_data(data: list) -> list:
try:
if not isinstance(data, list):
raise TypeError("Input must be a list")
return [x * 2 for x in data]
except TypeError as e:
print(f"Validation error: {e}")
return []
Chez LabEx, nous recommandons une approche équilibrée de la validation à l'exécution, combinant la vérification statique des types avec des vérifications sélectives à l'exécution.