最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年04月22日 08:38:04   作者:胡小旭  
在python中常常會(huì)遇到循環(huán)import即circular import的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Python中循環(huán)引用(import)失敗的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

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

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

原理

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

來(lái)自:http://m.fzitv.net/article/138673.htm

解決方案

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

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

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

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

修改前

# a.py
from B import b
def a():
 pass
# some codes
# b.py
from A import a
def b():
 a.a()
#some codes

修改后

# a.py
from B import b
def a():
 pass
# some codes
# b.py
import A
def b():
 A.a.a()
#some codes

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

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

修改前

# a.py
from B import b
def a():
 pass
# some codes
# b.py
from A import a
def b():
 a.a()
#some codes

修改后

# a.py
from B import b
def a():
 pass
# some codes
# b.py
def b():
 from A import a
 a.a()
#some codes

總結(jié)

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

相關(guān)文章

  • tensorflow輸出權(quán)重值和偏差的方法

    tensorflow輸出權(quán)重值和偏差的方法

    本篇文章主要介紹了tensorflow輸出權(quán)重值和偏差的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Python使用廣度優(yōu)先搜索遍歷混亂地鐵問(wèn)題

    Python使用廣度優(yōu)先搜索遍歷混亂地鐵問(wèn)題

    這篇文章主要介紹了Python使用廣度優(yōu)先搜索遍歷混亂地鐵問(wèn)題,廣度優(yōu)先搜索算法(又稱(chēng)寬度優(yōu)先搜索)是最簡(jiǎn)便的圖的搜索算法之一,這一算法也是很多重要的圖的算法的原型,需要的朋友可以參考下
    2023-04-04
  • Python操作MySQL模擬銀行轉(zhuǎn)賬

    Python操作MySQL模擬銀行轉(zhuǎn)賬

    這篇文章主要為大家詳細(xì)介紹了Python操作MySQL模擬銀行轉(zhuǎn)賬,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 搭建python django虛擬環(huán)境完整步驟詳解

    搭建python django虛擬環(huán)境完整步驟詳解

    這篇文章主要介紹了搭建python django虛擬環(huán)境完整步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python中if elif else及縮進(jìn)的使用簡(jiǎn)述

    Python中if elif else及縮進(jìn)的使用簡(jiǎn)述

    這篇文章主要介紹了Python中if elif else及縮進(jìn)的使用,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • python多線程實(shí)現(xiàn)代碼(模擬銀行服務(wù)操作流程)

    python多線程實(shí)現(xiàn)代碼(模擬銀行服務(wù)操作流程)

    這篇文章主要介紹了python模擬銀行服務(wù)多線程實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Django數(shù)據(jù)庫(kù)操作之save與update的使用

    Django數(shù)據(jù)庫(kù)操作之save與update的使用

    這篇文章主要介紹了Django數(shù)據(jù)庫(kù)操作之save與update的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 變長(zhǎng)雙向rnn的正確使用姿勢(shì)教學(xué)

    變長(zhǎng)雙向rnn的正確使用姿勢(shì)教學(xué)

    這篇文章主要介紹了變長(zhǎng)雙向rnn的正確使用姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 在Python中操作MongoDB的詳細(xì)教程和案例分享

    在Python中操作MongoDB的詳細(xì)教程和案例分享

    MongoDB是一個(gè)高性能、開(kāi)源、無(wú)模式的文檔型數(shù)據(jù)庫(kù),非常適合存儲(chǔ)JSON風(fēng)格的數(shù)據(jù),Python作為一種廣泛使用的編程語(yǔ)言,通過(guò)PyMongo庫(kù)可以方便地與MongoDB進(jìn)行交互,本文將詳細(xì)介紹如何在Python中使用PyMongo庫(kù)來(lái)操作MongoDB數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2024-08-08
  • 全面理解python命名空間字典

    全面理解python命名空間字典

    本文主要介紹了全面理解python命名空間字典,python的命名空間由字典實(shí)現(xiàn),屬性為鍵,對(duì)象為值,通過(guò)屬性找到對(duì)象,下面就來(lái)具體了解一下,感興趣的可以了解一下
    2023-12-12

最新評(píng)論

鲁甸县| 桐梓县| 邢台县| 胶南市| 丰原市| 淮北市| 甘洛县| 儋州市| 西贡区| 肃宁县| 辽中县| 丰原市| 丹巴县| 仁化县| 阳新县| 页游| 肇源县| 屏东县| 曲阜市| 石渠县| 蓬莱市| 奈曼旗| 阿城市| 襄汾县| 景泰县| 察隅县| 山东| 鹰潭市| 麻栗坡县| 临邑县| 牙克石市| 黔南| 大城县| 南阳市| 布拖县| 普陀区| 英山县| 澳门| 泰宁县| 江津市| 佛教|