En C, nous écrivons du code comme
#ifdef DEBUG
printf("Some debug log... This could probably be achieved by python logging.Logger");
/* Do some sanity check code */
assert someCondition
/* More complex sanitycheck */
while(list->next){
assert fooCheck(list)
}
#endif
Existe-t-il un moyen de le faire en python?
Edit: j'ai eu ma réponse, et plus :) Paolo, Steven Rumbalski et J Sebastian m'ont donné les informations que je cherchais. Merci das pour la réponse détaillée, même si je n'utiliserai probablement pas de préprocesseur pour le moment.
J Sebastian, dont le commentaire a été supprimé parce que la réponse dans laquelle il a posté son commentaire, a supprimé sa réponse je pense. Il a dit que je pouvais utiliser la méthode isEnabledFor () dans Logger pour alimenter un conditionnel.
Merci à tous pour vos contributions. Ceci est ma première question. J'aimerais pouvoir accepter les réponses de paolo ou j sebastian. Mais puisque ceux-ci ont été proposés en tant que commentaires, j'accepterai la réponse de Das.
J'utiliserai probablement soit http://nestedinfiniteloops.wordpress.com/2012/01/15/if-debug-python-flavoured/ ou Logger.isEnabledFor ()
Ce que vous recherchez est un préprocesseur pour python. En général, vous avez trois options:
Je recommande d'essayer d'abord pppp;)
Le principal avantage d'un préprocesseur par rapport à la définition d'un indicateur DEBUG
et à l'exécution de code if (DEBUG == True)
est que les vérifications conditionnelles coûtent également des cycles CPU, il est donc préférable de supprimer le code qui n'a pas besoin d'être exécuté. (si l'interpréteur python ne le fait pas de toute façon), au lieu de le sauter.
Utilisation __debug__
dans votre code:
if __debug__:
print 'Debug ON'
else:
print 'Debug OFF'
Créez un script abc.py
avec le code ci-dessus, puis
python -O abc.py
python abc.py
Observez la différence.
réponse de Mohammad est la bonne approche: utilisez if __debug__
.
En fait, Python supprime complètement l'instruction if
si l'expression est une constante statique (telle que True
, False
, None
, __debug__
, 0
et 0.0
), faisant de if __debug__
une directive au moment de la compilation plutôt qu'une vérification à l'exécution:
>>> def test():
... if __debug__:
... return 'debug'
... return 'not debug'
...
>>> import dis
>>> dis.dis(test)
3 0 LOAD_CONST 1 ('debug')
2 RETURN_VALUE
L'option -O
Est expliquée en détail dans la documentation python pour options de ligne de commande , et il existe une optimisation similaire pour instructions assert .
N'utilisez donc pas de préprocesseur externe - à cet effet, vous en avez un intégré!
Si vous recherchez des assertions en Python, assert
est une instruction valide python. http://docs.python.org/2/reference/simple_stmts .html # assert