Quero verificar meu ambiente quanto à existência de uma variável, digamos "FOO"
, em Python. Para esse fim, estou usando a os
biblioteca padrão. Depois de ler a documentação da biblioteca, descobri duas maneiras de atingir meu objetivo:
Método 1:
if "FOO" in os.environ:
pass
Método 2:
if os.getenv("FOO") is not None:
pass
Gostaria de saber qual método, se houver, é um condicional bom / preferido e por quê.
python
python-2.7
python-3.x
if-statement
environment-variables
Kshitij Saraogi
fonte
fonte
foo
está nos envários, não se procurafoo
resultados emNone
valores.Respostas:
Use o primeiro; ele tenta diretamente verificar se algo está definido
environ
. Embora a segunda forma funcione igualmente bem, ela está faltando semanticamente, pois você recebe um valor de volta, se existir, e o usa apenas para comparação.Você está tentando ver se algo está presente em
environ
, por que você iria ficar apenas para compará-lo e depois lançá-lo afastado ?É exatamente
getenv
isso que faz:(isso também significa que seu cheque pode ser apenas
if getenv("FOO")
)você não deseja obtê-lo , deseja verificar sua existência.
De qualquer forma,
getenv
é apenas um invólucroenviron.get
mas você não vê pessoas verificando a associação em mapeamentos com:Para resumir, use:
se você apenas deseja verificar a existência, enquanto, use
getenv("FOO")
se você realmente deseja fazer algo com o valor que você pode obter.fonte
Há um caso para qualquer solução, dependendo do que você deseja fazer, dependendo da existência da variável de ambiente.
Caso 1
Quando você deseja executar ações diferentes com base na existência da variável de ambiente, sem se importar com seu valor, a primeira solução é a melhor prática. Descreve sucintamente o que você testa: é 'FOO' na lista de variáveis de ambiente.
Caso 2
Quando você deseja definir um valor padrão, se o valor não for definido nas variáveis de ambiente, a segunda solução é realmente útil, embora não no formato que você escreveu:
ou talvez
Observe que, se você tiver várias opções para o seu aplicativo, poderá procurar
ChainMap
, o que permite mesclar vários dictos com base em chaves. Há um exemplo disso naChainMap
documentação:fonte
Para estar no lado seguro, use
Um caso de canto com as respostas acima é quando a variável de ambiente está definida, mas está vazia
Para este caso especial, você obtém
ou
Para evitar isso, use
or
Então você recebe
Quando temos variáveis de ambiente vazias?
Você esqueceu de definir o valor no
.env
arquivoou exportado como
ou esqueceu de configurá-lo
settings.py
Atualização: em caso de dúvida, confira essas orientações
fonte
def getenv(key, default=None):
assim que se forma que deve permitir um padrão vs o ou sintaxe no início>>> import os; os.environ['FOO'] = ''; print(os.getenv('FOO', 'bar'))
$ FOO= python -c "import os; print(os.getenv('FOO', 'bar'))"
Caso deseje verificar se várias variáveis env não estão definidas, você pode fazer o seguinte:
fonte
Meu comentário pode não ser relevante para as tags fornecidas. No entanto, fui levado a esta página da minha pesquisa. Eu estava procurando uma verificação semelhante no R e vim a seguir com a ajuda do post @hugovdbeg. Espero que seja útil para alguém que está procurando uma solução semelhante em R
fonte