导入循环嵌套

# a.py
from b import f2
def f1:
    print('我是a.f1')


# b.py
from a import f1
def f2:
    print('我是b.f2')



以上是编写的程序代码;操作过程中执行a.py,会有异常报错,如下:

============== RESTART: D:/Ksoftware/Python38/pyworkstations/a.py ==============
Traceback (most recent call last):
  File "D:/Ksoftware/Python38/pyworkstations/a.py", line 2, in <module>
    from b import f2
  File "D:/Ksoftware/Python38/pyworkstations\b.py", line 2, in <module>
    from a import f1
  File "D:/Ksoftware/Python38/pyworkstations\a.py", line 2, in <module>
    from b import f2
ImportError: cannot import name 'f2' from partially initialized module 'b' (most likely due to a circular import) (D:/Ksoftware/Python38/pyworkstations\b.py)
>>> 

报错中也有明显的指出:导入错误,不能再半初始化的b中导入f2(极有可能是出现了循环嵌套)

这个是循环嵌套导入问题。无论运行 a.py 或 b.py 哪一个文件都会抛出 ImportError 异常。这是因为在执行其中某一个文件(a.py)的加载过程中,会创建模块对象并执行对应的字节码。但当执行第一个语句的时候需要导入另一个文件(from b import y),因此 CPU 会转而去加载另一个文件(b.py)。同理,执行另一个文件的第一个语句(from a import x)恰好也是需要导入之前的文件(a.py)。此时,之前的文件处于仅导入第一条语句的阶段,因此其对应的字典中并不存在 x,故抛出“ImportError: cannot import name 'x'”异常。(from https://fishc.com.cn/thread-60578-1-3.html

如果非要这样来回调用的话,可以尝试使用如下方法:

# a.py
import b
def f1:
    print('我是a.f1')


# b.py
import a
def f2:
    print('我是b.f2')

这样就不会出现上面的报错了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值