真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中循環(huán)引用import失敗怎么辦-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Python中循環(huán)引用import失敗怎么辦的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)主營正鑲白網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,正鑲白h5小程序開發(fā)搭建,正鑲白網(wǎng)站營銷推廣歡迎正鑲白等地區(qū)企業(yè)咨詢

前言

最近在開發(fā)智能家居項目hestia-rpi項目中,由于代碼結(jié)構(gòu)層級劃分不合理,導致了循環(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

原理

這個時候就有一個問題,當前腳本Main第一次執(zhí)行,需要執(zhí)行from A import ,發(fā)現(xiàn)沒有A,就新建一個A在內(nèi)存中,然后填充A模塊的信息,就會去執(zhí)行A,此時,A里面要 from Main import D,那么因為Main已被執(zhí)行,就直接從內(nèi)存的map中取得Main的信息,不過此時Main的信息還沒有填充完,因為之前就是為了填充才轉(zhuǎn)到A的,這時從已有的空的Main中拿不到D,就會報錯,ImportError。

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

解決方案

方案一 合理劃分項目代碼層級

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

方案二 只引用當前的包,不引用具體的模塊

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

修改前

# 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)部

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

修改前

# 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

感謝各位的閱讀!關(guān)于“Python中循環(huán)引用import失敗怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


本文題目:Python中循環(huán)引用import失敗怎么辦-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://weahome.cn/article/cdopcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部