2013-06-04 32 views
62

Có sự khác biệt nào giữa hai điều này không? Khi nào tôi nên sử dụng cái kia? Một trong số đó có được chấp nhận không? Họ dường như có chức năng giống hệt nhau.Sự khác biệt giữa os.getenv và 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 

Trả lời

25

Một khác biệt quan sát (Python27):

os.environ đặt ra một ngoại lệ nếu biến môi trường không tồn tại. os.getenv không làm tăng một ngoại lệ, nhưng trả về None

+18

OP hỏi về 'os.environ.get()' trả về 'None' (trừ khi được chỉ định khác) và không bao giờ làm tăng ngoại lệ nếu env. var. không tồn tại. Những điều khó hiểu của bạn khi sử dụng 'os.environ ['TERM']' không phải là câu hỏi. – Anthon

35

Xem this related thread. Về cơ bản, os.environ được tìm thấy khi nhập và os.getenv là trình bao bọc cho os.environ.get, ít nhất trong CPython.

EDIT: Để trả lời nhận xét, trong CPython, os.getenv về cơ bản là lối tắt đến os.environ.get; kể từ os.environ được tải khi nhập os và chỉ khi đó, các khoản giữ tương tự cho os.getenv.

10

Trong Python 2.7 với 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 

Vì vậy, chúng ta có thể kết luận os.getenv chỉ là một wrapper đơn giản xung quanh os.environ.get.

Các vấn đề liên quan