0

使用此代码,输出了许多键,但我预计没有输出:

import os

for i in os.environ:
    print  i

这是来自 os.py 的代码:

try:
    environ
except NameError:
    environ = {}

os.environ 从哪里获得它的值?它在哪里初始化?

4

2 回答 2

7

os模块首先从特定于平台的子模块(例如_ntor _posix)导入所有名称,然后进行一些规范化。显然,environ名称(代表系统环境)由特定于平台的子模块定义的(正如通常预期的那样!!!),因此except子句 inos.py没有触发,os.environ只是它通常应该是的丰富字典。

于 2010-01-03T01:59:26.973 回答
3

引用的代码os.py是一个支持。这就是说,如果还没有人定义environ变量,则创建一个变量,并将空字典作为值。

environ确实存在,因为它已在第 58 行进一步导入:

from nt import *

如果您运行的是 Windows,以及其他平台的类似平台特定导入。所以在实践environ中将永远存在,并且永远不会使用空的 dict 支持。

那为什么还要提供支持呢?好吧,它在现实世界中的用处值得怀疑,因为据我所知,核心 Python 发行版当前支持的所有平台都实现了正确的environ查找。但是,可能存在或曾经存在不具有环境变量的 Python 运行的不寻常平台,并且在开发新平台时可能有用还没写。

于 2010-01-03T03:23:21.463 回答