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