2010-06-24 19 views
1

Je l'ai trouvé aujourd'hui en regardant une bibliothèque pour une API.Python - Pourquoi utiliser assert (required_param)?

def my_function(self, required_param=None): 
    assert(required_param) 
    ... Do cool function stuff 

Ne serait-il plus facile de le faire:

def my_function(self, required_param): 
    ... Do cool function stuff 

Ou, suis-je manque quelque chose? Le assert() bien sûr vous donne une exception unifiée qui pourrait apparaître, mais à moins que vous ne vouliez que cette fonction échoue silencieusement pour faire quelque chose dans ce cas, ne l'auriez-vous pas plutôt brisé fort afin que vous puissiez attraper de telles erreurs tôt? Je n'ai jamais compris pourquoi les gens utilisent des assertions dans le code de production. Peut-être, je vais après avoir obtenu des réponses à ce sujet.

Répondre

2

La seule raison pour laquelle je peux imaginer la situation que vous avez décrite est de rejeter également False, 0, [], (,), etc. Mais cela n'a pas de sens pour faire valoir contre la valeur par défaut.

Si l'auteur n'avait pas l'intention de rejeter d'autres valeurs fausses, alors assert est même plus douteuse.

+1

Mais dans ce cas, pourquoi pas 'if not required_param: ...' Je pense aussi que cela est sommaire. Peut-être que l'auteur a oublié de le sortir? Ou le remplacer par une exception plus informative? – gilesc

+0

L'utilisation de assert en tant que fonction est également sommaire - voir http://stackoverflow.com/questions/5142418/what-is-the-use-of-assert-in-python/30770447#30770447 –