美文网首页
浅谈python中的循环导入

浅谈python中的循环导入

作者: 小尤root | 来源:发表于2019-04-11 16:36 被阅读0次

    循环导入会报错,报找不到依赖的错误,也就是报找不到模块的错误。如下类似。

    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自带的模块统一在顶部最先导入。

    相关文章

      网友评论

          本文标题:浅谈python中的循环导入

          本文链接:https://www.haomeiwen.com/subject/njxxwqtx.html