【问题标题】:Cannot import a function from a module无法从模块导入函数
【发布时间】:2019-02-10 08:24:18
【问题描述】:

基本上我有 3 个模块,它们都相互通信并导入彼此的功能。我正在尝试从我的 shigui.py 模块中导入一个为程序创建 gui 的函数。现在我有一个函数可以获取 gui 中用户条目的值,我想将它们传递给另一个模块。我正在尝试传递以下函数:
def valueget(): keywords = kw.get() delay = dlay.get() category = catg.get()

所有导入都正常,直到我尝试使用
from shigui import valueget 将此函数导入到另一个将使用这些值的模块。事实上,我无法从这个文件中将任何函数导入任何模块。另外我应该补充一点,它们在同一个目录中。我很感激在这件事上的任何帮助。

【问题讨论】:

  • 您遇到的确切错误是什么?在此处发布回溯
  • 您还没有发布完整的代码,但最可能的问题是您正在交叉导入模块,即模块2被导入到模块1中,而模块1被导入到模块2中。
  • Traceback(最近一次调用最后一次):文件“C:\Users\me\Desktop\py shenanigans\supbot\venv\config.py”,第 6 行,在 from shigui import valueget ImportError: cannot import name 'valueget' from 'shigui' (C:\Users\me\Desktop\py shenanigans\supbot\venv\shigui.py)
  • 但我很确定它是从模块中交叉导入的,我会尝试重构我的代码

标签: python function tkinter import


【解决方案1】:

嗯,我不完全确定什么进口什么,但这里是我可以告诉你的。 Python 可以 有时允许循环依赖。但是,这取决于您的依赖项的布局是什么。首先,我想说看看是否有任何方法可以避免这种情况发生(重组代码等)。如果这是不可避免的,那么您可以尝试一件事。当 Python 导入模块时,它会按照代码执行的顺序进行。这意味着如果您在导入之前有一个定义,您有时可以通过在第二个模块中导入第一个模块来访问第一个模块中的定义。让我举个例子吧。假设您有两个模块,A 和 B。

答:

def someFunc():
    # use B's functionality from before B's import of A
    pass

import B

乙:

def otherFunc():
    # use A's functionality from before A's import of B
    pass

import A

在这种情况下,Python 将允许这样做。但是,进口后的一切并不总是公平的游戏,所以要小心。如果你想知道为什么会这样,你可以更多地阅读 Python 的模块系统。

有用但不完整的链接:https://docs.python.org/3/tutorial/modules.html

【讨论】:

    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2021-01-22
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多