【问题标题】:Python: How to Call a function in another file with a circular importPython:如何使用循环导入调用另一个文件中的函数
【发布时间】:2016-01-16 16:33:39
【问题描述】:

我正在制作一个基于文本的地板游戏,用于学习目的。我希望所有的移动函数都在一个单独的 python 文件中,但是我在让它们一起工作时遇到了问题。

我的主游戏名为floors.py,地图文件为floormap.py

我可以从floormap.py 内部的floors.py 导入和运行函数,完全没问题。

但我不知道在运行floormap.py 函数后如何返回floors.pyfunctions。下面是一个例子。当我运行它时,我在终端中收到以下错误:

NameError: global name 'first_hall_1' is not defined

我确实使用:

from floormap import first_hall_1

但我可以找到一种方法让函数在原始文件中再次被调用。

Floors.py:

import floormap

def first_hall_object():
    grab = raw_input("Enter Command > ")

    backward = ['back', 'Back', 'Backward', 'backward']

    if any (s in grab for s in backward): 
        first_hall_1()

def walkin_hall():
    print "whatever"

floormap.py:

import floors 

def first_hall_1():
    print "You are in front of the door again. It is locked."
    walkin_hall()

【问题讨论】:

  • 尝试重新组织你的代码,这样两个模块就不会像那样相互依赖。例如,让 floormap.py 导入 floormap 并调用 floormap 函数,但 不要 让 floormap.py 也导入 floor 并调用 floormap 函数。循环进口是合法的,但它们可能会带来痛苦。

标签: python function python-import


【解决方案1】:

您需要使用模块名称floormap 限定first_hall_1

def first_hall_object():
    grab = raw_input("Enter Command > ")

    backward = ['back', 'Back', 'Backward', 'backward']

    if any (s in grab for s in backward): 
        floormap.first_hall_1()  # <-----

walkin_hall() 调用也是如此:

def first_hall_1():
    print "You are in front of the door again. It is locked."
    floors.walkin_hall()

【讨论】:

  • OP 正在进行循环导入,这不适用于 from ... import ... 语法(无论如何,并非一直如此)。在floormap.py 中的walkin_hall() 调用需要是floors.walkin_hall()
  • @Blckknght,感谢您指出这一点。我相应地更新了答案。
  • 'AttributeError: 'module' 对象没有属性 'first_hall_1'
  • 我认为我做错了什么。即使添加了新内容,我仍然会收到相同的属性错误。 “walkin_hall”函数低于“first_hall_object”函数是否重要。由于功能总是上升。更新:刚刚尝试将 walkin_hall 向上移动到其他功能之上。没有效果。
  • @HenFish,正如 Blckknght 指出的那样,存在循环导入。 (防止在first_hall_1 调用之前完成完全导入)尝试将first_hall_object() 调用提取到另一个模块中(就像main.py 我所做的那样)。
猜你喜欢
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多