2013-06-04 15 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一个简单的包装。