29
Bir değişkeni varlığını çevreme kontrol etmek istiyorum

, Python, "FOO" söylüyorlar. Bu amaçla, os standart kitaplığını kullanıyorum.Bir çevresel değişkenin var olup olmadığını kontrol etmek için iyi bir uygulama nedir?

Yöntem 1: kütüphanenin belgelerine okuduktan sonra, benim hedefe ulaşmak için 2 yol anladım var

if "FOO" in os.environ: 
    pass 

Yöntem 2:

if os.getenv("FOO") is not None: 
    pass 

Ben, eğer hangi yöntemi öğrenmek istiyorum ya, iyi/tercih edilen şartlı ve neden.

+0

: ChainMap belgelerinde bunun bir örneğidir vardır. Her ikisi de aynı amaca hizmet ediyor. Yöntem 1'i temizleyeceği için temizleyeceğim –

+0

İçinde bir şey olduğunu söyleyemem. İşe yaramıyorsa bir tane seç (bozuk para mı?) Ve daha sonra yeniden değerlendir. Açıkçası bence bu soruyu yazarak daha fazla zaman harcadığınızı düşünüyorum. – jonrsharpe

+0

Görüş temel alınmıştır. İlkini kullanırdım, ama sana bağlı. –

cevap

38

İlkini kullanın; environ'da bir şeyin tanımlanmış olup olmadığını doğrudan kontrol etmeye çalışır. İkinci form eşit derecede iyi çalışıyor olsa varsa geri bir değer elde ve sadece bir karşılaştırma için kullandığımızdan, bu anlam yoksundur. bir şey varsa Sen environ görmek için çalışıyoruz

, neden sadece karşılaştırmak için olsun olur ve sonra çöpe atmak? getenv yaptığı tam olarak budur

:

, bir ortam değişkeni alın yoksa None dönün. isteğe bağlı ikinci bağımsız değişken, alternatif bir varsayılan belirtebilir.

bunu varlığı var olup olmadığını kontrol etmek istiyorum, almak istemediğiniz (bu da çek sadece if getenv("FOO") olabileceği anlamına geliyor).

iki şekilde de, getenvenviron.get etrafında sarıcı ama insanlar ile eşleştirmeleri üyelik için kontrol görmüyorum:

from os import environ 
if environ.get('Foo') is not None: 

Özetlemek gerekirse, kullanım:

if "FOO" in os.environ: 
    pass 

size eğer sadece aslında sen alabilirsiniz değere sahip bir şey yapmak istiyorsanız, getenv("FOO") kullanırken, varlığı için kontrol etmek istiyorum.

+2

Açıklamanız için teşekkürler. Bunu aklımda tutacağım. –

4

Ortam değişkeninin varlığına bağlı olarak ne yapmak istediğinize bağlı olarak ya çözüm için bir durum var.

onun değerini önemsemeden, tamamen ortam değişkeninin varlığına dayalı farklı eylemler almak isteyen Durum 1, ilk çözüm en iyi uygulamadır. Ne için test ettiğinizi kısaca açıklar: ortam değişkenleri listesinde 'FOO'dur.

if 'KITTEN_ALLERGY' in os.environ: 
    buy_puppy() 
else: 
    buy_kitten() 

Vaka değeri ikinci çözüm aslında yararlıdır ortam değişkenleri tanımlı değilse değil şeklinde sen yazdın olsa, varsayılan değer ayarlamak istediğiniz 2

:

server = os.getenv('MY_CAT_STREAMS', 'youtube.com') 

ya da belki

server = os.environ.get('MY_CAT_STREAMS', 'youtube.com') 

Not yüzden mi Appl için çeşitli seçenekler varsa ication anahtarlara dayanarak birden fazla dicts birleştirmek için izin veren ChainMap içine bakmak isteyebilirsiniz. Öncelikle görüş dayanmaktadır

[...] 
combined = ChainMap(command_line_args, os.environ, defaults)