Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
decorateurs_verifargs [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


decorateurs_verifargs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
decorateurs_verifargs [2011/03/28 07:11]
tyrtamos
decorateurs_verifargs [2011/03/28 07:25]
tyrtamos
Ligne 3: Ligne 3:
 ===== Problématique ===== ===== Problématique =====
  
-Si on prend l'exemple d'une calculatrice, toutes les fonctions de calcul peuvent être appelées avec des données saisie par l'utilisateur. Il est alors important qu'en cas d'erreur à cause de données anormales (ex: racine carrée d'un nombre négatif):+Si on prend l'exemple d'une calculatrice, toutes les fonctions de calcul peuvent être appelées avec des données saisies par l'utilisateur. Il est alors important qu'en cas d'erreur à cause de données anormales (ex: racine carrée d'un nombre négatif):
  
   * on puisse récupérer l'erreur pour qu'elle ne "plante" pas la calculatrice,   * on puisse récupérer l'erreur pour qu'elle ne "plante" pas la calculatrice,
Ligne 78: Ligne 78:
 except (ValueError, TypeError) as e: except (ValueError, TypeError) as e:
     print e     print e
 +</code>
 +
 +Bien sûr, si on mentionne dans le décorateur des variables qui n'existent pas dans les arguments de la fonction, une exception ValueError est générée:
 +
 +<code python>
 +@verifargs("a>=b", "c>=0", b=int, c2=(int,long,float), d=(NoneType,str,unicode))
 +def fonctiontest(a, b, c, d="toto"):
 +    print a*b*c, d
 +# génère à l'initialisation une exception ValueError puisque c2 n'existe pas dans les variables d'appel de la fonction
 +</code>
 +
 +A noter que le decorateur étant conçu pour avoir des arguments, il doit être passé avec des parenthèses, même s'il n'y a pas d'argument. Ce qui, bien sûr, n'a pas d'intérêt ici:
 +
 +<code python>
 +@verifargs()
 +def fonctiontest(a, b, c, d="toto"):
 +    print a*b*c, d
 +# ce décorateur ne fait rien mais reste syntaxiquement correct!
 </code> </code>
  
Ligne 158: Ligne 176:
   * exécution de appelfonc à chaque appel de la fonction décorée: exécution des vérifications demandées avant l'exécution de la fonction.   * exécution de appelfonc à chaque appel de la fonction décorée: exécution des vérifications demandées avant l'exécution de la fonction.
  
-Bien sûr, si on mentionne dans le décorateur des variables qui n'existent pas dans les arguments de la fonction, une exception ValueError est générée: 
- 
-<code python> 
-@verifargs("a>=b", "c>=0", b=int, c2=(int,long,float), d=(NoneType,str,unicode)) 
-def fonctiontest(a, b, c, d="toto"): 
-    print a*b*c, d 
-# génère à l'initialisation une exception ValueError puisque c2 n'existe pas dans les variables d'appel de la fonction 
-</code> 
- 
-A noter que le decorateur étant conçu pour avoir des arguments, il doit être passé avec des parenthèses, même s'il n'y a pas d'argument. Ce qui, bien sûr, n'a pas d'intérêt ici: 
- 
-<code python> 
-@veriftypes() 
-def fonctiontest(a, b, c, d="toto"): 
-    print a*b*c, d 
-# ce décorateur ne fait rien mais reste syntaxiquement correct! 
-</code> 
  
 \\ \\
decorateurs_verifargs.txt · Dernière modification: 2011/04/04 21:19 de tyrtamos