尽管Python说该模块存在,但为什么我要获得这种Imperror



我对以下repl互动感到困惑:

In [7]: import os
In [8]: os.sys
Out[8]: <module 'sys' (built-in)>
In [9]: os.sys.stderr
Out[9]: <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
In [10]: from os.sys import stderr
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-10-cd47f2925e40> in <module>()
----> 1 from os.sys import stderr
ImportError: No module named 'os.sys'; 'os' is not a package

Python 3.5.3如何指出os.sys是一个模块,但是当试图导入它时,会引起错误?

P.S。:我知道,要访问错误流,我需要import stderr from sys,但是无论如何我都感到困惑。

os模块实际导入sys,因此sys模块可通过os.sys访问(就像模块顶级定义的任何名称一样)。这不会使sys成为os的适当子模块,因此您不能从os.sys导入。

作为旁注,os导入sys是您不应依靠的实现细节。

您尚未导入os.sys。您只访问了符号。from ... import ...语句正在尝试访问没有数据中没有数据的解释器的一部分。(最有可能,sys.modules。)

在重复命令之前尝试执行import os.sys

>>> import sys
>>> sys.modules['os']
>>> <module 'os' from '/.../lib/python3.5/os.py'>
sys.modules['os.sys']
>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'os.sys'

另外,os.sys似乎是sys模块的别名。没有有效的导入,

>>> import sys
>>> os.sys == sys
>>> True

相关内容

最新更新