使用此代码,输出了许多键,但我预计没有输出:
import os
for i in os.environ:
print i
这是来自os.py的代码:
try:
environ
except NameError:
environ = {}
os.environ从哪里获取其值?它在哪里初始化?
答案 0 :(得分:7)
os
模块首先从特定于平台的子模块(例如_nt
或_posix
)导入所有名称,然后进行一点规范化。显然,特定于平台的子模块定义了environ
名称(代表系统环境) (因为它通常是!!!),所以except
子句在os.py
中没有触发,os.environ
只是它通常所谓的的丰富词典。
答案 1 :(得分:3)
来自os.py
的引用代码是一个支持者。它说,如果没有人定义了environ
变量,请创建一个,将空字典作为值。
但environ
确实存在,因为它已在第58行进一步导入:
from nt import *
如果您正在运行Windows,以及其他平台的类似平台特定导入。因此在实践中environ
将始终存在,并且永远不会使用空的dict后备。
为什么还要提供一个支持呢?好吧,它在现实世界中是有用的,因为据我所知,核心Python发行版当前支持的所有平台都实现了正确的environ
查找。然而,可能存在或者一直存在Python运行但没有环境变量的不寻常平台,并且在开发新平台时可能会有用,当环境变量之类的系统接口不是很多程序无法运行时写了。