Ich möchte meine Umgebung auf das Vorhandensein einer Variablen überprüfen "FOO"
, beispielsweise in Python. Zu diesem Zweck verwende ich die os
Standardbibliothek. Nachdem ich die Dokumentation der Bibliothek gelesen habe, habe ich zwei Möglichkeiten gefunden, um mein Ziel zu erreichen:
Methode 1:
if "FOO" in os.environ:
pass
Methode 2:
if os.getenv("FOO") is not None:
pass
Ich würde gerne wissen, welche Methode eine gute / bevorzugte Bedingung ist und warum.
python
python-2.7
python-3.x
if-statement
environment-variables
Kshitij Saraogi
quelle
quelle
foo
geeignet , da Sie fragen, ob sie in den env-Variablen enthalten ist, und nicht, ob Sie nachfoo
Ergebnissen inNone
Werten suchen .Antworten:
Verwenden Sie die erste; es versucht direkt zu überprüfen, ob etwas in definiert ist
environ
. Obwohl die zweite Form genauso gut funktioniert, fehlt sie semantisch, da Sie einen Wert zurückerhalten, wenn er vorhanden ist, und ihn nur für einen Vergleich verwenden.Sie versuchen , zu sehen , ob etwas vorhanden ist in
environ
, warum würden Sie bekommen nur vergleichen sie und dann werfen Sie es weg ?Genau das
getenv
macht:(Dies bedeutet auch, dass Ihr Scheck nur sein könnte
if getenv("FOO")
)du willst es nicht bekommen , du willst überprüfen, ob es existiert.
In beiden Fällen
getenv
handelt es sich nur um einen Wrapper,environ.get
aber Sie sehen keine Personen, die in Zuordnungen nach Mitgliedschaft suchen, mit:Um es zusammenzufassen, verwenden Sie:
Wenn Sie nur nach der Existenz
getenv("FOO")
suchen möchten , verwenden Sie diese Option , wenn Sie tatsächlich etwas mit dem Wert tun möchten, den Sie möglicherweise erhalten.quelle
Es gibt einen Fall für jede Lösung, abhängig davon, was Sie tun möchten, abhängig von der Existenz der Umgebungsvariablen.
Fall 1
Wenn Sie verschiedene Aktionen ausführen möchten, die ausschließlich auf der Existenz der Umgebungsvariablen basieren, ohne auf deren Wert zu achten, ist die erste Lösung die beste Vorgehensweise. Es beschreibt kurz und bündig, worauf Sie testen: ist 'FOO' in der Liste der Umgebungsvariablen.
Fall 2
Wenn Sie einen Standardwert festlegen möchten, wenn der Wert nicht in den Umgebungsvariablen definiert ist, ist die zweite Lösung tatsächlich nützlich, jedoch nicht in der Form, in der Sie sie geschrieben haben:
oder vielleicht
Beachten Sie, dass Sie möglicherweise mehrere Optionen für Ihre Anwendung prüfen möchten, um
ChainMap
mehrere Diktate basierend auf Schlüsseln zusammenzuführen. Ein Beispiel hierfür finden Sie in derChainMap
Dokumentation:quelle
Um auf der sicheren Seite zu sein
Ein Eckfall mit den obigen Antworten ist, wenn die Umgebungsvariable gesetzt ist, aber leer ist
Für diesen Sonderfall bekommen Sie
oder
Um dies zu vermeiden, verwenden Sie einfach
or
Dann bekommst du
Wann haben wir leere Umgebungsvariablen?
Sie haben vergessen, den Wert in der
.env
Datei festzulegenoder exportiert als
oder vergessen, es einzustellen
settings.py
Update: Im Zweifelsfall sehen Sie sich diese Einzeiler an
quelle
def getenv(key, default=None):
so, wenn ja, dass ein Standard gegen die oder Syntax am Anfang erlaubt sein sollte>>> import os; os.environ['FOO'] = ''; print(os.getenv('FOO', 'bar'))
$ FOO= python -c "import os; print(os.getenv('FOO', 'bar'))"
Wenn Sie überprüfen möchten, ob nicht mehrere env-Variablen festgelegt sind, können Sie Folgendes tun:
quelle
Mein Kommentar ist möglicherweise nicht relevant für die angegebenen Tags. Ich wurde jedoch von meiner Suche zu dieser Seite geführt. Ich suchte nach einem ähnlichen Check in R und kam mit Hilfe des @ hugovdbeg-Beitrags auf Folgendes. Ich hoffe, es wäre hilfreich für jemanden, der nach einer ähnlichen Lösung in R sucht
quelle