2013-06-04 12 views
62

這兩者之間有什麼區別?我應該什麼時候使用一個?其中之一是否被棄用?他們似乎具有完全相同的功能。os.getenv和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 

回答

25

一個區別:如果環境變量不存在

os.environ引發一個例外。 os.getenv沒有引發異常,但返回無

+18

OP詢問'os.environ.get()'返回'None'(除非另有指定),並且如果env不會引發異常。變種。不存在。你使用'os.environ ['TERM']'來混淆你的問題,這不是問題所在。 – Anthon

35

請參閱this related thread。基本上,導入時發現os.environ,並且os.getenv至少在CPython中是os.environ.get的包裝。

編輯:回覆評論,在CPython中,os.getenv基本上是os.environ.get的快捷方式;因爲os.environ在導入os時加載,只有這樣,對於 os.getenv也是如此。觀察到(Python27)

10

在Python 2.7使用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 

因此,我們可以得出結論:os.getenv只是圍繞os.environ.get一個簡單的包裝。