当前位置: 首页 > 面试题库 >

为什么Python模块有时不导入其子模块?

萧明贤
2023-03-14
问题内容

我注意到我今天想解释的东西很奇怪。我不是100%不确定如何将其表达为一个问题,所以google是不可能的。由于某些奇怪的原因,日志记录模块无权访问模块logging.handlers。如果您不相信我,请自己尝试:

>>> import logging
>>> logging.handlers
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'handlers'
>>> import logging.handlers
>>> logging.handlers
<module 'logging.handlers' from '/usr/lib/python2.6/logging/handlers.pyc'>

谁能解释为什么会这样?


问题答案:

在Python中,需要先导入模块,然后才能对其进行访问。import logging仅导入日志记录模块。碰巧这logging是一个带有子模块的软件包,但是那些子模块仍然不会自动加载。因此,您需要先显式导入,logging.handlers然后才能访问它。

如果您想知道为什么有时看起来不需要多余的导入:某些软件包在导入时会导入其子模块的某些或全部-
只需在__init__.py文件中进行这些导入即可。在其他情况下,可能是您导入了其他内容,也导入了logging.handlers。导入哪段代码都没有关系。只要流程中的
某些内容
在您logging.handlers访问之前就导入了,它就会在那里。有时看起来像包的模块实际上不是一个与osand类似的模块os.pathos不是软件包,它只是导入正确的其他模块(针对您的平台)并调用它path,以便您可以按进行访问os.path




 类似资料:
  • 我有一个这样的目录: 我可以这样导入父模块: 那么,既然我已经有了父模块,那么获取子模块的最佳方法是什么?我已经尝试了,,等。 有什么建议吗? 谢谢

  • 我需要在Python中导入一个名为array_queue的模块。我检查了一下,如果我不使用它,就会出现一个提示:“array_queue imported but unused”。但是,如果我使用它并运行该程序,则会出现以下情况: ModuleNotFounderRror:没有名为“array_queue”的模块

  • 我是Python新手,我仍然无法理解为什么我们需要一个文件来导入模块。我已经看过了其他的问题和答案,比如这个。 让我困惑的是,我可以在没有的情况下导入我的模块,那么为什么我需要它呢? 以我为例,, index.py, 模块/hello/hello.py, 模块/Hello/HelloWorld.py, 后果 只需要这两条线, 没有任何。有人能解释为什么它是这样工作的吗? 如果是正确的方法,我应该在

  • 问题内容: 已经使用了平面软件包,我没想到嵌套软件包会遇到这个问题。这是… init .py的内容 这两个和是空的。 内容 内容(3个版本) 版本1 这是导入事物的坏方法和不安全方法(批量导入所有内容),但是它可以工作。 版本2 一种逐项导入的更安全的方法,但是失败了,Python不希望这样:失败,并显示消息:“没有名为模块的模块”。但是…… ……说。所以这是一个模块,但不是一个模块/ -P 8-

  • 问题内容: 据我了解,python模块永远不会导入两次,即该模块中的代码仅在首次导入时才执行。随后的import语句只需将模块添加到导入范围即可。 我有一个名为“ TiledConvC3D.py”的模块,但似乎已多次导入。我使用pdb在该模块的代码顶部打印堆栈。 这是从第一次执行模块开始的堆栈跟踪的结尾: 它将继续执行多次。但是,第二次调用的完整堆栈跟踪不会显示对的任何调用,因此不应执行这些执行: