我混淆了python内置模块和非内置模块。这里我使用sys模块来查找内置模块,
import sys
def dump(module):
print module, "=>",
if module in sys.builtin_module_names:
print "<BUILTIN>"
else:
module = __import__(module)
print module.__file__
dump("os")
dump("sys")
dump("string")
dump("strop")
dump("zlib")输出:
os => /usr/lib/python2.7/os.pyc
sys => <BUILTIN>
string => /usr/lib/python2.7/string.pyc
strop => <BUILTIN>
zlib => <BUILTIN>这里我的问题是为什么python的人将这些模块分开?有什么原因吗。我只想知道这件事,如果有人知道请解释。
发布于 2014-02-26 09:43:37
sys.builtin_module_names中列出的内置模块(__main__除外)没有__file__属性。
根据文档-数据模型
模块
__file__是从其中加载模块的文件的路径名,如果它是从文件加载的。对于某些类型的模块,例如静态链接到解释器__file__的C模块,可能缺少属性;对于从共享库动态加载的扩展模块,它是共享库文件的路径名。
为了避免AttributeError,代码似乎将它们区分开来。
>>> import sys
>>> sys.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'但是,在sys.builtin_module_names中没有列出其他模块,但是没有__file__属性。例如:
>>> import cPickle
>>> cPickle.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'为了避免这种异常,应该修改函数dump:
def dump(module):
print module, "=>",
module = __import__(module)
print getattr(module, '__file__', 'No File')https://stackoverflow.com/questions/22037251
复制相似问题