丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁 > 攻略

【yy報(bào)錯(cuò)】專題Python之模塊詳細(xì)梳理(四),相對導(dǎo)入報(bào)錯(cuò)最優(yōu)雅解決方法

相對導(dǎo)入

相對導(dǎo)入是指在同一個(gè)項(xiàng)目下的不同模塊之間相互導(dǎo)入,稱為相對導(dǎo)入。

相對導(dǎo)入的案例

項(xiàng)目結(jié)構(gòu)圖如下:

項(xiàng)目名稱project,該目錄下有xx子項(xiàng)目和模塊。其中xx子目錄下有y和z兩個(gè)子目錄,y子目錄下有abc.py模塊和yy.py模塊,z子目錄下有zz.py模塊。yy.py是xx子項(xiàng)目的入口。是整個(gè)項(xiàng)目的入口。

模塊的內(nèi)容

""" 此模塊是整個(gè)project項(xiàng)目的入口 """ from xx.y import yy yy.f2() prin, yy.num2, yy.num3) out: 123 10 hello 10 123 888

yy.py模塊的內(nèi)容

""" 此模塊是xx子項(xiàng)目對外引用的入口 """ from .abc import * from ..z.zz import * num3 = 888 def f2(): print(num2) print(num1)

zz.py模塊的內(nèi)容

""" 子項(xiàng)目,被導(dǎo)入的子模塊 """ num1 = 10 def f(): print('hello')

abc.py模塊的內(nèi)容

""" 子項(xiàng)目,被導(dǎo)入的子模塊 """ num2 = 123

以上就是模擬大型項(xiàng)目的框架結(jié)構(gòu),測試運(yùn)行模塊可以看到輸出正常,完全沒有問題。

請仔細(xì)看yy.py模塊的內(nèi)容:

from .abc import *語句:. 表示當(dāng)前目錄,abc表示abc.py模塊。

from ..z.zz import *語句,.. 表示父目錄,z表示z文件夾,zz表示zz.py模塊。

另外... 表示祖父目錄,請熟悉from 路徑標(biāo)識(shí)結(jié)構(gòu)。

相對導(dǎo)入:以from . 開頭的語句,例如from .abc import *。

絕對導(dǎo)入:以文件夾或包或模塊名開頭的語句,例如from xx.y import yy。

以上暫未遇到報(bào)錯(cuò),可如果你嘗試調(diào)試yy.py模塊,直接運(yùn)行yy.py模塊時(shí)會(huì)報(bào)錯(cuò)。

相對導(dǎo)入報(bào)錯(cuò)信息

相對導(dǎo)入報(bào)錯(cuò)情況分析

是不是非常奇怪!為什么運(yùn)行模塊調(diào)用yy.py模塊時(shí)不報(bào)錯(cuò),而直接腳本方式運(yùn)行yy.py模塊時(shí)會(huì)報(bào)錯(cuò)。我在網(wǎng)上找了很多資料沒理出個(gè)頭緒。后來找到有建議在yy.py模塊中對添加路徑,方法雖然可行但不優(yōu)雅,也沒有解釋為什么yy.py模塊被調(diào)用時(shí)不報(bào)錯(cuò)而直接運(yùn)行會(huì)報(bào)錯(cuò)。

我針對被調(diào)用時(shí)不報(bào)錯(cuò)主動(dòng)執(zhí)行時(shí)報(bào)錯(cuò)的情況特地查了很多資料,做了仔細(xì)分析,關(guān)于上述這個(gè)特點(diǎn)我首先想到的是__name__,這個(gè)變量在被調(diào)用時(shí)和主動(dòng)執(zhí)行時(shí)內(nèi)容是不一樣的。后來針對模塊調(diào)用查資料找到了__package__,這個(gè)變量在被調(diào)用時(shí)和主動(dòng)執(zhí)行時(shí)內(nèi)容也是不一樣的。

下面我們嘗試打印__name__和__package__這兩個(gè)變量,看看在被調(diào)用和主動(dòng)執(zhí)行時(shí)分別有什么不同。

修改yy.py模塊文件內(nèi)容

""" 此模塊是xx子項(xiàng)目對外引用的入口 """ from .abc import * from ..z.zz import * print(__name__) print(__package__) num3 = 888 def f2(): print(num2) print(num1)

執(zhí)行模塊的結(jié)果:

xx.y.yy xx.y 123 10 hello 10 123 888

直接執(zhí)行yy.py的結(jié)果(暫時(shí)注釋那2行相對導(dǎo)入的代碼,要不然報(bào)錯(cuò)會(huì)導(dǎo)致看不到print打印內(nèi)容):

查看變量內(nèi)容

相對導(dǎo)入報(bào)錯(cuò)的pythonic解決方法

認(rèn)真觀察yy.py模塊被導(dǎo)入時(shí)打印的內(nèi)容和主動(dòng)執(zhí)行時(shí)打印的內(nèi)容不同之處。我想到了最pythonic的解決方案。

""" 此模塊是xx子項(xiàng)目對外引用的入口 """ __package__ = 'xx.y' from .abc import * from ..z.zz import * num3 = 888 def f2(): print(num2) print(num1)

直接修改__package__變量的值為被調(diào)用時(shí)的值,這樣主動(dòng)運(yùn)行yy.py模塊時(shí)不再報(bào)錯(cuò),被調(diào)用時(shí)也不報(bào)錯(cuò)。

以上是相對導(dǎo)入的知識(shí)點(diǎn)梳理,我在yy.py模塊直接調(diào)試運(yùn)行會(huì)報(bào)錯(cuò)這一問題上花費(fèi)很多時(shí)間和精力,最終想到了最優(yōu)雅的解決方式,希望對各位深入學(xué)python的朋友有所幫助,如果要轉(zhuǎn)載請注明出處和作者是“皛心”。

1.《【yy報(bào)錯(cuò)】專題Python之模塊詳細(xì)梳理(四),相對導(dǎo)入報(bào)錯(cuò)最優(yōu)雅解決方法》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《【yy報(bào)錯(cuò)】專題Python之模塊詳細(xì)梳理(四),相對導(dǎo)入報(bào)錯(cuò)最優(yōu)雅解決方法》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2488776.html

上一篇

【海棠文學(xué)城入口】我和男閨蜜的女友,小斗了一下(150)

下一篇

【大元帥的長刀】專題武庚紀(jì):大元帥秀出“百米大刀”,永恒之夜附體,砍完這刀領(lǐng)盒飯

【yy報(bào)錯(cuò)】YY口誤成亮點(diǎn),網(wǎng)友直呼不可原諒

【yy報(bào)錯(cuò)】YY口誤成亮點(diǎn),網(wǎng)友直呼不可原諒

yy報(bào)錯(cuò)相關(guān)介紹,最近,在北京冬奧會(huì)倒計(jì)時(shí)1000天活動(dòng)晚會(huì)上,吳京、YY、通力雅等嘉賓相繼發(fā)言,通力雅發(fā)言時(shí)她犯了口誤,將2022年說成2002年,此后該事件登上了主要平臺(tái)的列數(shù)。 之后佟麗婭在社交平臺(tái)上回應(yīng)這是口誤...

yy報(bào)錯(cuò) YY直播回應(yīng):渾水的報(bào)告包含大量錯(cuò)誤信息

11月17日,百度宣布將以36億美元收購歡聚的國內(nèi)直播業(yè)務(wù)。僅兩天后,知名機(jī)構(gòu)渾水研究公司在官方推特上發(fā)布報(bào)告,稱YY直播數(shù)據(jù)約90%是偽造的,導(dǎo)致開心股價(jià)下跌近30%。渾水報(bào)告指出,YY平臺(tái)的主主播收入并沒有外界想象的那么高,懷疑公會(huì)涉嫌詐騙。2018年,公會(huì)實(shí)際收入連聚會(huì)公...