Je configure une interface utilisateur et je souhaite permettre à l'utilisateur de spécifier quel type de journalisation est requis. Pour cela, je veux utiliser quelque chose comme ceci: où le réglage d'informations peut être spécifié. P> Pour la journalisation Il y a les options suivantes: Débogage, Info, Avertissement, Erreur, critique et je vais l'avoir stocké dans une chaîne. Comment puis-je substituer la chaîne de manière appropriée dans le code ci-dessus? P> p>
4 Réponses :
Vous pouvez stocker cette valeur dans votre configuration (je suppose que vous utilisez ConfigParser ou JSON ou quelque chose de similaire?) Et tout le charger sur l'application commence. Sur la manière de relier le texte de la valeur, ce qui dépend de la boîte à outils de l'interface utilisateur, probablement plus simple serait une combinaison de valeurs basée sur une touche dict. P> Exemple de configuration de la journalisation avec configuration Parser P> < Pré> xxx pré> p> journalisation.Level code> est une valeur entière, comme on le voit Dans le manuel .
Vous pouvez utiliser le dictionnaire pour le convertir
Vous avez quelques options.
Le meilleur est probablement un dict: p> un autre utilise des conditionnels: P> if logtype == "INFO":
logparam = logging.INFO
elif logtype == "DEBUG":
logparam = logging.DEBUG
else:
...
J'aime l'option getattr (journalisation, logType) car il s'agit d'une doublure - quel est le problème avec cela? Unpythonic?
@Michael je veux dire, ce n'est pas vraiment trop mauvais. Peut-être que les gens ne me détestent pas pour cela lol. Je pense que cela peut être raisonnablement idiomatique. Le seul problème est que si la chaîne n'est pas un niveau de journalisation valide, si c'est quelque chose comme __ dir __ code>, qui retournera toujours une valeur.
Un bon sur est ici: Stackoverflow.com/questions/4075190/... Mais je ne comprends toujours pas quel est le problème de ce problème.
@Michael ouais, je monte ma réponse. Cela semble en fait être parfaitement valide.
À condition que vous utilisiez une valeur par défaut (comme le troisième paramètre) que vous connaissez est valide, il me semble assez sûr ...
malgré le nom, logging.getlevelName code> convertit réellement les deux manières:
Vous pouvez utiliser
if / elif / elif / elif / code> ou vous pouvez créer un dictionnaire
{"info": journalisation.info, ...} code>