2010-01-03 70 views
0

使用此代碼,多鍵輸出,但我希望沒有輸出:os.environ初始化在哪裏?

import os 

for i in os.environ: 
    print i 

這是os.py代碼:哪裏os.environ從得到其值

try: 
    environ 
except NameError: 
    environ = {} 

它在哪裏初始化?

+1

這個問題似乎很模糊。你可能會添加更多關於你想要做什麼的信息以及你遇到的問題是什麼? – avpx 2010-01-03 01:55:41

+0

除了包含Python源代碼片段(很可能不會被破壞),您可能會考慮包含回溯。 – bernie 2010-01-03 02:06:33

回答

7

os模塊開始從一個特定於平臺的子模塊(如_nt_posix),則確實有點正常化進口的所有名稱。顯然environ名稱(代表系統環境)是由平臺特定的子模塊定義的(因爲它通常預期爲!!!),所以os.py中的except子句沒有觸發,而os.environ只是豐富的字典通常是應該是

3

os.py引用的代碼是一個後盾。這就是說,如果沒有人定義environ變量,則創建一個空字典作爲值。

environ確實存在,因爲它已經導入該進一步上漲在線58:

from nt import * 

如果您正在運行Windows,以及類似的特定於平臺的導入其他平臺。因此在實踐中environ將一直存在,並且永遠不會使用空字典逆止器。

爲什麼還要提供一個止退器呢?嗯,在真實世界中它是有用的,因爲據我所見,核心Python發行版目前支持的所有平臺都實現了適當的environ查找。然而,可能有或者曾經是運行Python的異常平臺,它們沒有環境變量,並且在開發新平臺時可能會有用,而不會讓很多程序在系統接口(如環境變量)無法運行時運行書面呢。

相關問題