循环导入会报错,报找不到依赖的错误,也就是报找不到模块的错误。如下类似。
File "D:\goods-give\app\web\goods.py", line 8, in <module>
from app.models.import Gift
File "D:\goods-give\app\models\gift.py", line 9, in <module>
from app.models.wish import Wish
File "D:\goods-give\app\models\wish.py", line 8, in <module>
from app.models.gift import Gift
ImportError: cannot import name 'Gift'
这确实很头疼,明明有这个文件或模块,就是报错说找不到,这样的错误可能就是循环导入导致的。为什么循环导入会报错呢?首先python的代码是从文件顶部向底部执行(人为改变除外),再次python的导入对于一个文件只会执行一次。那么在文件A的顶部导入了B,又在文件B顶部中导入A。如下,注意是顶部。
from app.models.gift import Gift #wish文件顶部
from app.models.wish import Wish #gift文件顶部
当执行到wish文件时,执行到导入这句的时候立即跳转像gift文件,然后开始执行gift中的代码,执行到导入语句时又跳转到wish文件,又开始执行wish中的代码,执行到
from app.models.gift import Gift这句时就报错了,为什么报错,因为同一文件的同一导入只会执行一次。
有人说出现循环导入是设计的问题,应该重写考虑设计,这确实是个不错的方法。但,但,出现了但就往下看,解决方法非常简单,不了解的时候可以困几天。
既然在顶部导入报错,那我们可以换个位置嘛,放底部如何?还行,测试能正常运行起来。但如果在哪里使用就在那里导入不是更好?应该是更好,所以采用后者来解决。注:对于python自带的模块统一在顶部最先导入。
网友评论