亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

米泉市| 定襄县| 松原市| 开阳县| 阿尔山市| 庄河市| 湟中县| 渭南市| 微山县| 安徽省| 涞水县| 施秉县| 奉贤区| 德昌县| 长岭县| 井研县| 芷江| 武义县| 刚察县| 扎兰屯市| 宜城市| 凤庆县| 巴青县| 区。| 开远市| 禄丰县| 萨迦县| 那坡县| 白玉县| 周口市| 巩义市| 上高县| 靖安县| 特克斯县| 南华县| 汶上县| 太原市| 彝良县| 浦东新区| 定日县| 栾城县|