Saya ingin memeriksa lingkungan saya untuk keberadaan variabel, katakanlah "FOO"
, dengan Python. Untuk tujuan ini, saya menggunakan os
perpustakaan standar. Setelah membaca dokumentasi perpustakaan, saya menemukan 2 cara untuk mencapai tujuan saya:
Metode 1:
if "FOO" in os.environ:
pass
Metode 2:
if os.getenv("FOO") is not None:
pass
Saya ingin tahu metode mana, jika salah satu, adalah syarat yang baik / disukai dan mengapa.
python
python-2.7
python-3.x
if-statement
environment-variables
Kshitij Saraogi
sumber
sumber
foo
ada di env vars, bukan jika mencarifoo
hasil dalamNone
nilai.Jawaban:
Gunakan yang pertama; itu langsung mencoba untuk memeriksa apakah ada sesuatu yang didefinisikan dalam
environ
. Meskipun bentuk kedua berfungsi sama baiknya, bentuk ini kurang semantik karena Anda mendapatkan nilai kembali jika ada dan hanya ada menggunakannya untuk perbandingan.Anda mencoba untuk melihat apakah ada sesuatu yang hadir dalam
environ
, mengapa Anda akan mendapatkan hanya untuk membandingkan dan kemudian melemparkannya jauh ?Itulah tepatnya yang
getenv
terjadi:(Ini juga berarti cek Anda mungkin saja
if getenv("FOO")
)Anda tidak ingin mendapatkannya , Anda ingin memeriksa keberadaannya.
Either way,
getenv
hanya pembungkusenviron.get
tetapi Anda tidak melihat orang memeriksa keanggotaan dalam pemetaan dengan:Untuk meringkas, gunakan:
jika Anda hanya ingin memeriksa keberadaan, sementara, gunakan
getenv("FOO")
jika Anda benar-benar ingin melakukan sesuatu dengan nilai yang mungkin Anda dapatkan.sumber
Ada kasus untuk salah satu solusi, tergantung pada apa yang ingin Anda lakukan tergantung pada keberadaan variabel lingkungan.
Kasus 1
Ketika Anda ingin mengambil tindakan berbeda berdasarkan pada keberadaan variabel lingkungan, tanpa memperhatikan nilainya, solusi pertama adalah praktik terbaik. Ini secara ringkas menjelaskan apa yang Anda uji: adalah 'FOO' dalam daftar variabel lingkungan.
Kasus 2
Ketika Anda ingin menetapkan nilai default jika nilai tidak didefinisikan dalam variabel lingkungan, solusi kedua sebenarnya berguna, meskipun tidak dalam bentuk yang Anda tulis:
atau mungkin
Perhatikan bahwa jika Anda memiliki beberapa opsi untuk aplikasi Anda, Anda mungkin ingin melihatnya
ChainMap
, yang memungkinkan untuk menggabungkan beberapa dicts berdasarkan kunci. Ada contohnya diChainMap
dokumentasi ini:sumber
Agar aman digunakan
Kasus sudut dengan jawaban di atas adalah ketika variabel lingkungan ditetapkan tetapi kosong
Untuk kasus khusus ini Anda dapatkan
atau
Untuk menghindari ini gunakan saja
or
Lalu kamu dapatkan
Kapan kita memiliki variabel lingkungan kosong?
Anda lupa mengatur nilai dalam
.env
fileatau diekspor sebagai
atau lupa mengaturnya
settings.py
Perbarui: jika ragu, periksa ini satu-baris
sumber
def getenv(key, default=None):
begitu jika demikian yang memungkinkan default vs the atau sintaks pada awalnya>>> import os; os.environ['FOO'] = ''; print(os.getenv('FOO', 'bar'))
$ FOO= python -c "import os; print(os.getenv('FOO', 'bar'))"
Jika Anda ingin memeriksa apakah beberapa variabel env tidak disetel, Anda dapat melakukan hal berikut:
sumber
Komentar saya mungkin tidak relevan dengan tag yang diberikan. Namun, saya diarahkan ke halaman ini dari pencarian saya. Saya sedang mencari cek serupa di R dan saya datang berikut dengan bantuan pos @hugovdbeg. Saya harap ini akan membantu bagi seseorang yang mencari solusi serupa di R
sumber