Je veux vérifier dans mon environnement l'existence d'une variable, par exemple "FOO"
, en Python. Pour cela, j'utilise la os
bibliothèque standard. Après avoir lu la documentation de la bibliothèque, j'ai trouvé 2 façons d'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 quelle méthode, le cas échéant, est une bonne / préférée conditionnelle et pourquoi.
python
python-2.7
python-3.x
if-statement
environment-variables
Kshitij Saraogi
la source
la source
foo
est dans les variables d'environnement, pas si la recherche defoo
résultats dans desNone
valeurs.Réponses:
Utilisez le premier; il essaie directement de vérifier si quelque chose est défini dans
environ
. Bien que la deuxième forme fonctionne aussi bien, elle manque sémantiquement puisque vous récupérez une valeur si elle existe et ne l' utilisez que pour une comparaison.Vous essayez de voir si quelque chose est présent dans
environ
, pourquoi voudriez - vous faire juste pour le comparer puis le jeter loin ?C'est exactement ce que
getenv
fait:(cela signifie également que votre chèque pourrait simplement être
if getenv("FOO")
)vous ne voulez pas l' obtenir , vous voulez vérifier son existence.
Quoi qu'il en soit, ce
getenv
n'est qu'un wrapper,environ.get
mais vous ne voyez pas de personnes vérifier leur adhésion dans les mappages avec:Pour résumer, utilisez:
si vous voulez juste vérifier l'existence, tandis que, utilisez
getenv("FOO")
si vous voulez réellement faire quelque chose avec la valeur que vous pourriez obtenir.la source
Il existe un cas pour l'une ou l'autre solution, en fonction de ce que vous voulez faire sous réserve de l'existence de la variable d'environnement.
Cas 1
Lorsque vous souhaitez effectuer différentes actions uniquement basées sur l'existence de la variable d'environnement, sans vous soucier de sa valeur, la première solution est la meilleure pratique. Il décrit succinctement ce que vous testez: 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 sous la forme que vous l'avez écrite:
ou peut-être
Notez que si vous avez plusieurs options pour votre application, vous voudrez peut-être examiner
ChainMap
, ce qui permet de fusionner plusieurs dictionnaires en fonction des clés. Il y a un exemple de ceci dans laChainMap
documentation:la source
Pour être du bon côté, utilisez
Un cas de coin avec les réponses ci-dessus est lorsque la variable d'environnement est définie mais est vide
Pour ce cas spécial, vous obtenez
ou
Pour éviter cela, utilisez simplement
or
Ensuite, vous obtenez
Quand avons-nous des variables d'environnement vides?
Vous avez oublié de définir la valeur dans le
.env
fichierou exporté en tant que
ou j'ai oublié de l'installer
settings.py
Mise à jour: en cas de doute, découvrez ces one-liners
la source
def getenv(key, default=None):
si oui, cela devrait permettre une syntaxe par défaut par rapport à la syntaxe ou au début>>> import os; os.environ['FOO'] = ''; print(os.getenv('FOO', 'bar'))
$ FOO= python -c "import os; print(os.getenv('FOO', 'bar'))"
Si vous souhaitez vérifier si plusieurs variables d'environnement ne sont pas définies, vous pouvez effectuer les opérations suivantes:
la source
Mon commentaire n'est peut-être pas pertinent pour les balises fournies. Cependant, j'ai été dirigé vers cette page à partir de ma recherche. Je cherchais un enregistrement similaire dans R et j'ai trouvé ce qui suit avec l'aide de @hugovdbeg post. J'espère que cela serait utile pour quelqu'un qui recherche une solution similaire dans R
la source