使用这段代码,可以输出许多键,但我没有期望输出:
import os
for i in os.environ:
print i这是来自os.py的代码:
try:
environ
except NameError:
environ = {}os.environ从哪里得到它的值?在哪里初始化?
发布于 2010-01-03 01:59:26
os模块首先从特定于平台的子模块(如_nt或_posix)导入所有名称,然后进行少量规范化。显然,environ名称(代表系统环境)是由平台特定的子模块定义的(通常期望它是!),所以os.py中的except子句没有触发,os.environ只是通常应该是的丰富字典。
发布于 2010-01-03 03:23:21
os.py引用的代码是一个后盾。也就是说,如果还没有人定义一个environ变量,那么创建一个变量,用一个空字典作为一个值。
但是environ确实存在,因为它是通过在第58行的更高的位置导入的:
from nt import *如果您正在运行Windows,以及其他平台的类似平台特定导入。因此,在实践中,environ将始终存在,而空头备份将永远不会使用。
那么,为什么还要提供一个后盾呢?嗯,它在现实世界中的用处令人怀疑,因为据我所见,目前由核心Python发行版支持的所有平台都实现了正确的environ查找。然而,在Python运行没有环境变量的不寻常平台中,可能存在或者曾经有过这样的平台。在开发新平台时,如果还没有编写环境变量之类的系统接口,那么就不会有很多程序无法运行。
https://stackoverflow.com/questions/1993643
复制相似问题