Ce qui est une bonne pratique pour vérifier si une variable d'environnement existe ou pas?
Je veux vérifier mon environnement pour l'existence d'une variable, par exemple "FOO"
, en Python. Pour cela, je suis en utilisant le os
de la bibliothèque standard. Après lecture de la bibliothèque, de la documentation, j'ai trouvé 2 façons pour atteindre mon objectif:
Méthode 1:
if "FOO" in os.environ:
pass
Méthode 2:
if os.getenv("FOO") is not None:
pass
Je voudrais savoir la méthode qui, si elle soit, est une bonne préféré/conditionnel et pourquoi.
- Il est principalement opinion fondée. Les deux servent le même but. Je préfère la méthode 1 comme il est plus propre
- Je ne peux pas dire, il y a quelque chose en elle. Choisissez-en un (flip d'une pièce de monnaie?) et de réévaluer plus tard, s'il s'avère ne pas fonctionner. Franchement, je pense que vous avez passé plus de temps à taper cette question que vous devez sauver de toute façon!
- Opinion fondée. Je voudrais utiliser le premier, mais c'est à vous.
- si vous voulez vérifier si une variable est-il exister ?? le droit ??
- Je pense que vous avez oublié de voir la question "qu'est Ce qu'une bonne pratique de vérifier si un environnement variable existe ou pas en Python?"
- Je vous remercie.
- Je vous remercie pour votre commentaire. Je pose cette question afin de savoir la communauté de la convention. Comme le Zen dit:
There should be one-- and preferably only one --obvious way to do it.
. Je voulais savoir que l'on voie ici. - Opinion fondée. Méthode 1 syntaxe sert le mieux, puisque vous le demandez si
foo
est dans l'env de vars, pas si la recherche defoo
résultats dansNone
valeurs. - Mais qui peut ne pas être évident, sauf si vous êtes en néerlandais...
- Haha ! Je ne suis pas un néerlandais. Donc j'ai posé la question ici.
Vous devez vous connecter pour publier un commentaire.
Utiliser le premier, c'directement tente de vérifier si quelque chose est définie dans
environ
. Bien que la deuxième forme fonctionne aussi bien, il manque du point de vue sémantique puisque vous obtenez en retour une valeur si elle existe et seulement l'utiliser pour une comparaison.Vous êtes à essayer de voir si quelque chose est présent dans
environ
, pourquoi voudriez-vous obtenir juste pour comparer, et puis de de le jeter loin?C'est exactement ce que
getenv
n':(cela signifie que votre enregistrement pourrait être simplement
if getenv("FOO")
)vous ne voulez pas obtenir, vous voulez vérifier son existence.
De toute façon,
getenv
est juste un wrapper autour deenviron.get
mais vous ne voyez pas les gens de la vérification de l'appartenance correspondances avec:Pour résumer, l'utilisation:
si vous juste voulez vérifier l'existence, tandis que, de l'utilisation
getenv("FOO")
si vous voulez vraiment faire quelque chose avec la valeur que vous pourriez obtenir.Il y a un cas pour l'une ou l'autre solution, en fonction de ce que vous voulez faire subordonnée à l'existence de la variable d'environnement.
Cas 1
Lorsque vous souhaitez effectuer des actions différentes en se basant uniquement sur l'existence de la variable d'environnement, sans prendre soin de sa valeur, la première solution est la meilleure pratique. Il décrit succinctement ce que vous tester: est " FOO " dans la liste des variables d'environnement.
Cas 2
Lorsque vous souhaitez définir une valeur par défaut si la valeur n'est pas définie dans les variables d'environnement la deuxième solution est en fait utile, mais pas dans le formulaire, vous avez écrit:
ou peut-être
Notez que si vous disposez de plusieurs options pour votre demande, vous voudrez peut-être regarder dans
ChainMap
, qui permet de fusionner plusieurs dicts basée sur les touches. Il est un exemple de cela dans leChainMap
documentation:Pour être sur le côté sûr, utiliser
Un coin de cas avec les réponses ci-dessus, c'est quand la variable d'environnement est définie, mais est vide
Pour ce cas spécial, vous obtenez
ou
Pour éviter cela, utilisez simplement
or
Puis vous obtenez des
Quand dois-je le vide des variables d'environnement?
Vous avez oublié de définir la valeur dans la
.env
fichierou exportées que
ou oublié de le mettre dans
settings.py
Mise à jour: en cas de doute, consultez ces one-liners
def getenv(key, default=None):
donc, si ce qui devrait permettre à un défaut contre le ou la syntaxe au début>>> import os; os.environ['FOO'] = ''; print(os.getenv('FOO', 'bar'))
$ FOO= python -c "import os; print(os.getenv('FOO', 'bar'))"
Dans le cas où vous souhaitez vérifier si plusieurs variables d'environnement ne sont pas définies, vous pouvez effectuer les opérations suivantes: