2013-06-04 9 views
62

Czy jest jakaś różnica między tymi dwoma? Kiedy powinienem używać jednego na drugim? Czy jeden z nich jest przestarzały? Wydają się mieć dokładnie taką samą funkcjonalność.Różnica między os.getenv a os.environ.get?

>>> os.getenv('TERM') 
'xterm' 
>>> os.environ.get('TERM') 
'xterm' 

>>> os.getenv('FOOBAR', "not found") == "not found" 
True 
>>> os.environ.get('FOOBAR', "not found") == "not found" 
True 

Odpowiedz

25

Różnica obserwowane (Python27)

os.environ zgłasza wyjątek, jeżeli zmienne środowiska nie występuje. os.getenv nie wyjątek, ale zwróci None

+18

OP pyta o 'os.environ.get()', które zwraca 'Brak' (chyba że podano inaczej) i nigdy nie podnosi wyjątku, jeśli env. var. nie istnieje. Twoje mylące rzeczy z użyciem 'os.environ ['TERM']", co nie jest o to pytaniem. – Anthon

35

Zobacz this related thread. Zasadniczo, os.environ znajduje się przy imporcie, a os.getenv jest wrapper do os.environ.get, przynajmniej w CPython.

EDYCJA: Aby odpowiedzieć na komentarz, w CPython, os.getenv jest w zasadzie skrótem do os.environ.get; od os.environ jest ładowany przy imporcie os, i tylko wtedy to samo dotyczy os.getenv.

10

W Pythonie 2.7 z ipython:

>>> import os 
>>> os.getenv?? 
Signature: os.getenv(key, default=None) 
Source: 
def getenv(key, default=None): 
    """Get an environment variable, return None if it doesn't exist. 
    The optional second argument can specify an alternate default.""" 
    return environ.get(key, default) 
File:  ~/venv/lib/python2.7/os.py 
Type:  function 

więc możemy stwierdzić os.getenv tylko proste otoki wokół os.environ.get.