国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中循環(huán)引用(import)失敗的解決方法

2020-02-22 23:48:29
字體:
供稿:網(wǎng)友

前言

最近在開發(fā)智能家居項(xiàng)目hestia-rpi項(xiàng)目中,由于代碼結(jié)構(gòu)層級劃分不合理,導(dǎo)致了循環(huán)引用(import)module失敗的問題,錯誤如下:

Traceback (most recent call last):
  File "./main.py", line 8, in <module>
    from hestiarpi.library.server import server
  File "/home/pi/server/hestiarpi/library/server/server.py", line 4, in <module>
    from hestiarpi.library.brain import handler
  File "/home/pi/server/hestiarpi/library/brain/handler.py", line 5, in <module>
    from hestiarpi.library.brain import monitor
  File "/home/pi/server/hestiarpi/library/brain/monitor.py", line 6, in <module>
    from hestiarpi.library.server import server
ImportError: cannot import name server

原理

這個時(shí)候就有一個問題,當(dāng)前腳本Main第一次執(zhí)行,需要執(zhí)行from A import ,發(fā)現(xiàn)沒有A,就新建一個A在內(nèi)存中,然后填充A模塊的信息,就會去執(zhí)行A,此時(shí),A里面要 from Main import D,那么因?yàn)镸ain已被執(zhí)行,就直接從內(nèi)存的map中取得Main的信息,不過此時(shí)Main的信息還沒有填充完,因?yàn)橹熬褪菫榱颂畛洳呸D(zhuǎn)到A的,這時(shí)從已有的空的Main中拿不到D,就會報(bào)錯,ImportError。

來自://www.jb51.net/article/138673.htm

解決方案

方案一 合理劃分項(xiàng)目代碼層級

循環(huán)引用最大的本質(zhì)問題是代碼層級結(jié)構(gòu)劃分的不合理,所以最根本的、最合理的解決方案就是重新劃分好代碼的層級結(jié)構(gòu),使其合理化,自然就規(guī)避了循環(huán)引用的麻煩。

方案二 只引用當(dāng)前的包,不引用具體的模塊

如果你的代碼是這樣,那么這種方式是會奏效的。

修改前

# a.pyfrom B import bdef a(): pass# some codes# b.pyfrom A import adef b(): a.a()#some codes

修改后

# a.pyfrom B import bdef a(): pass# some codes# b.pyimport Adef b(): A.a.a()#some codes

方案二 將引用放到函數(shù)內(nèi)部

如果你的代碼是這樣,那么這種方式是會奏效的。

修改前

# a.pyfrom B import bdef a(): pass# some codes# b.pyfrom A import adef b(): a.a()#some codes

修改后

# a.pyfrom B import bdef a(): pass# some codes# b.pydef b(): from A import a a.a()#some codes

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對武林站長站的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 清苑县| 长春市| 重庆市| 宁波市| 松桃| 大同县| 喀喇沁旗| 驻马店市| 焦作市| 米泉市| 奉化市| 嫩江县| 吉首市| 大同县| 涿鹿县| 罗甸县| 绥阳县| 绥江县| 象州县| 玉山县| 平定县| 沙洋县| 锦州市| 巴彦淖尔市| 金湖县| 凤冈县| 天祝| 泰兴市| 万源市| 塔城市| 精河县| 板桥市| 阿城市| 建德市| 太仆寺旗| 鸡泽县| 钦州市| 乐都县| 丰城市| 商洛市| 金塔县|