gpt4 book ai didi

Python 2.7 导入异常

转载 作者:行者123 更新时间:2023-12-01 04:21:13 25 4
gpt4 key购买 nike

我得到以下文件结构:

/sound
__init.py
toplevelmain.py
/filters
__init__.py
vocoder.py
/effects
__init__.py
echo.py
/main
__init__.py
x.py
main.py
/main2
__init__.py
main2.py

文件内容如下

x.py:

def print_x():
print "X"

回声.py:

def print_echo():
print "ECHO"

声码器.py:

from effects import echo 
from main import x

def print_vocoder():
print "VOCODER"
echo.print_echo()
x.print_x()

toplevelmain.py:

#! /usr/bin/python
import filters.vocoder
filters.vocoder.print_vocoder()

main.py 和 main2.py 具有相同的代码:

#! /usr/bin/python
if __name__ == '__main__':
if __package__ is None:
import sys
from os import path
sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) )
from filters.vocoder import print_vocoder
else:
from ..filters.vocoder import print_vocoder
print_vocoder()

问题:
如果我执行 toplevelmain.py 或 main2.py 一切正常。但是,如果我执行与 main2.py 具有相同代码的 main.py,则会出现以下异常:

File "./main.py", line 9, in <module>
from filters.vocoder import print_vocoder
File "/home/tg/sound/filters/vocoder.py", line 3, in <module>
from main import x
File "/home/tg/sound/main/main.py", line 14, in <module>
print_vocoder()
NameError: name 'print_vocoder' is not defined

这里发生了什么以及如何更改 main2.py 以保持文件结构?
这个问题在 Python 3.x 中解决了吗?

最佳答案

这是一个导入循环。

您在 filters.vocoder 中导入了 main.x,并在 main.main 中导入了 filters.vocoder .

当您运行main2/main2.py时,没有导入循环。这就是为什么您可以毫无错误地运行它。

您需要更新代码以删除两个文件中的一个导入。

关于Python 2.7 导入异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33673907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com