中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中循環引用import失敗怎么辦

發布時間:2021-07-13 10:36:53 來源:億速云 閱讀:187 作者:小新 欄目:開發技術

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

前言

最近在開發智能家居項目hestia-rpi項目中,由于代碼結構層級劃分不合理,導致了循環引用(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第一次執行,需要執行from A import ,發現沒有A,就新建一個A在內存中,然后填充A模塊的信息,就會去執行A,此時,A里面要 from Main import D,那么因為Main已被執行,就直接從內存的map中取得Main的信息,不過此時Main的信息還沒有填充完,因為之前就是為了填充才轉到A的,這時從已有的空的Main中拿不到D,就會報錯,ImportError。

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

解決方案

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

循環引用最大的本質問題是代碼層級結構劃分的不合理,所以最根本的、最合理的解決方案就是重新劃分好代碼的層級結構,使其合理化,自然就規避了循環引用的麻煩。

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

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

修改前

# 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

方案二 將引用放到函數內部

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

修改前

# 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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闽侯县| 万安县| 望奎县| 石阡县| 棋牌| 米泉市| 垣曲县| 吴旗县| 三穗县| 新巴尔虎左旗| 大洼县| 荔波县| 竹溪县| 柘荣县| 雷山县| 门源| 颍上县| 吉安市| 安龙县| 巨鹿县| 诸暨市| 双城市| 太和县| 莆田市| 淮北市| 东辽县| 桐梓县| 海阳市| 济南市| 五台县| 镇安县| 衡阳县| 常熟市| 四平市| 云南省| 林口县| 张掖市| 如皋市| 电白县| 城固县| 体育|