python中import的作用_python使用import報錯是什么原因

5d5b5e8d094cd765.jpg

在練習Python中package的相對導入時,即from . import XXX

或者from .. import XXX

有時會遇到這樣兩個錯誤:SystemError: Parent module '' not loaded, cannot perform relative import

和ValueError: attempted relative import beyond top-level package

其實這兩個錯誤的原因歸根結底是一樣的:在涉及到相對導入時,package所對應的文件夾必須正確的被python解釋器視作package,而不是普通文件夾。否則由于不被視作package,無法利用package之間的嵌套關系實現python中包的相對導入。

文件夾被python解釋器視作package需要滿足兩個條件:

1、文件夾中必須有__init__.py文件,該文件可以為空,但必須存在該文件。

2、不能作為頂層模塊來執行該文件夾中的py文件(即不能作為主函數的入口)。

補充:在"from YY import XX"這樣的代碼中,無論是XX還是YY,只要被python解釋器視作package,就會首先調用該package的__init__.py文件。如果都是package,則調用順序是YY,XX。

另外,練習中“from . import XXX”和“from .. import XXX”中的'.'和'..',可以等同于linux里的shell中'.'和'..'的作用,表示當前工作目錄的package和上一級的package。

舉個例子:

目錄樹testIm/

--__init__.py

--main.py : from Tom import tom

--Tom/

--__init__.py : print("I'm Tom's __init__!")

--tom.py : from . import tomBrother, from .. import kate,print("I'm Tom!")

--tomBrother.py print(I'm Tom's Brother!)

--Kate/

--__init__.py : print("I'm Kate's __init__!")

--kate.py

運行文件:main.py

結果I'm Tom's __init__!

I'm Tom's Brother!

Traceback (most recent call last):

File "D:\PythonLearning\TestIm\main.py", line 3, in from Tom import tom

File "D:\PythonLearning\TestIm\Kate\kate.py", line 4, in from .. import kate

ValueError: attempted relative import beyond top-level package>>>

可以看到from . import tomBrother順利執行,首先執行了Tom文件夾下的__init__.py文件,后來執行了tomBrother.py文件,但是當執行到“from .. import kate”時報錯,這是因為我們是在TestIm文件夾下把main.py文件作為主函數的入口執行的,因此盡管TestIm文件夾中有__init__.py文件,但是該文件夾不能被python解釋器視作package,即Tom package不存在上層packge,自然會報錯,相對導入時超出了最高層級的package。

修改方法:

目錄樹test/

--main.py : from testIm.Tom import tom

--testIm/

--__init__.py

--Tom/

--__init__.py : print("I'm Tom's __init__!")

--tom.py : from . import tomBrother, from .. import Kate,print("I'm Tom!")

--tomBrother.py print(I'm Tom's Brother!)

--Kate/

--__init__.py : print("I'm Kate's __init__!")

--kate.py

運行文件:main.py

結果I'm top's __init__!

I'm Tom's __init__!

I'm Tom's Brother!!

I'm Kate's __init__!

I'm Tom!

即主函數入口不在TestIm中,則TestIm和其同樣包含__init__.py文件的子文件夾都被python解釋器視作package,形成相應的嵌套關系。可以正常使用from . import XXX和from .. import XXX。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537499.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537499.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537499.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10卓越性能模式,提升電腦性能

Win10隱藏了一個電源模式“卓越性能”,是比“高性能”模式更強性能的電源模式。 這個模式開啟后,電腦到底有沒有變快呢?心理上是快了。 開啟步驟 1.鼠標移到開始按鈕圖標上,別動!!!&#xff…

Redis Sentinel 模擬故障遷移

什么是redis sentinel 參考文檔:https://redis.io/topics/sentinel 簡單的來說,就是Redis Sentinel 為redis 提供高可用性,主要體現在下面幾個方面:1.監控:redis sentinel會不間斷的監控主服務器和從服務器是否正常工作2.通知:當出現問題時,…

python2中文輸出代碼_解決vscode python print 輸出窗口中文亂碼的問題

解決vscode python print 輸出窗口中文亂碼的問題 發布時間:2020-09-17 23:53:25 來源:腳本之家 閱讀:119 一、搭建 python 環境 在 VSC 中點擊 F1 鍵,彈出控制臺,輸入 ext install 界面左側彈出擴展窗格,輸…

十二贊日志收集與報警系統一覽

先快速介紹一下十二贊的日志收集系統:十二贊的日志收集系統,分為兩塊,一塊是線上系統的各種報錯、異常的日志收集,主要是各種線上代碼運行期間產生,我們稱之為log-collect,一塊是用戶行為操作的日志收集&am…

招標投標法(摘錄)

黑色:原文 紅色:重點 藍色:博主批注 第三條 在中華人民共和國境內進行下列工程建設項目: (一〉大型基礎設施、公用事業等關系社會公共利益、公眾安全的項目; ( 二〉全部或者部分使用國有資…

erp生產管理系統流程_企業生產管理好幫手——ERP智能管理系統

ERP企業管理軟件是為企業決策層及員工提供決策運行手段的管理平臺。在生產制造制造業中,盡管加工早已用于機械自動化,但在倉庫管理、人工管理工作,還必須erp公司智能管理系統協助管理方法。erp公司管理軟件是公司供應鏈管理的綜合性管理軟件&…

神經網絡的基本工作原理

神經網絡的基本工作原理 一、總結 一句話總結:先給一個初始值,然后依賴正確值(真實值)進行修復模型(訓練模型),直到模型和真實值的誤差可接受 初始值 真實值 修復模型 1、神經網絡由基本的神經元…

政府采購法(摘錄)

黑色:原文 紅色:重點 藍色:博主批注 第七條 政府采購實行集中采購和分散采購相結合。集中采購的范圍由省級以上人民政府公布的集中采用目錄確定。 屬于中央預算的政府采用項目,其集中采用目錄由國務院確定并公布;屬…

jsonrpc aria2_拋棄迅雷,Aria2 新手入門

迅雷已經用了 10 年,一直把它看作是速度最快也最方便的下載工具。迅雷會員也是我必續的服務。但,迅雷墮落了。thunder: 迅雷專屬鏈接越來越少,基本都是磁力、BT 的天下迅雷會員加速不再給力,大量資源速度為 0。會員雖然還有一年多…

《招標投標法》和《招標投標實施條例》有什么關系?

招投標法是1999年頒布2000年正式執行的我國第一部關于招投標方面的法律,對我國的招投標起到指導性作用,而實施條例是于2012年2月1日正式執行的法律法規,是根據招投標法頒布10年以來一些不足做了進一步的補充和說明,更具有可操作性…

pytorch 測試每一類_2D-UNet腦膠質瘤分割BraTs + Pytorch實現

2D-UNet講解玖零猴:U-Net與FCN的區別醫學表現網絡詳解創新?zhuanlan.zhihu.comBraTs數據準備數據來源本文用的訓練集和驗證集均來自BraTs2018的訓練集(其中HGG:210個病人,LGG:75個病人)但由于BraTs只公開訓練集數據,沒有測試集數據,如果在訓練集中再拆一部分用來作…

電商必備6款商品詳情數據采集,一鍵批量下載淘貓拼和1688寶貝信息和鏈接!

當我們分析競品以及選款復制時,往往需要先將商品信息采集下載下來,然而一個個去尋找商品并手動下載,顯然是不現實的。 特別是做無貨源店群的賣家,可能需要在不同平臺采集商品信息,那么就需要用到適用不同平臺的商品采…

合同法摘錄

黑色:原文 紅色:重點 藍色:博主批注 第十條 當事人訂立合同,有書面形式、口頭形式和其他形式 。 (口頭形式和其他形式,沒聽過吧) 第十一條 書面形式是指合同書、信件和數據電文&#xff0…

vue.js的項目實戰

歡迎大家前往騰訊云社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由蔡述雄發表于云社區專欄 需求背景 組件庫是做UI和前端日常需求中經常用到的,把一個按鈕,導航,列表之類的元素封裝起來,方便日常使用,調用方…

c++ 輸出二進制_Python入門3print格式化輸出的幾種方法

接《Python入門2》print格式化輸出的幾種方法⒂格式化輸出舉例【例】str_name"小明"num_age15print("我叫%s,今年%d歲"%(str_name,num_age))#注意print的前后兩部分用%間隔,不是逗號,后面的輸出列表加小括號【例】str&qu…

著作權法(摘錄)

黑色:原文 紅色:重點 藍色:博主批注 第十二條 改編、翻譯、注釋、整理己有作品而產生的作品,其著性權由改編、翻譯、注釋、整理人享有,但行使著作權時不得侵犯原作品 的著作權。 (天下文章一大抄,看你…

判斷瀏覽器是否為IE和版本

var isIE8 false; var isIE9 false; var isIE10 false; isIE8 !!navigator.userAgent.match(/MSIE 8.0/); isIE9 !!navigator.userAgent.match(/MSIE 9.0/); isIE10 !!navigator.userAgent.match(/MSIE 10.0/); //判斷當前瀏覽器版本是否符合,符合為true轉載于…

485串口測試工具軟件下載_串口調試助手詳細講解(結合實操),通訊問題不再是問題...

經常會有學員問我,老師老師,我的plc和變頻器通訊不上了,不知道什么原因,您能幫我看看么。其實吧,這個一般遠程是幫不上你什么的,還是要你自己去測試,找出問題,那么怎么測試呢&#x…

img標簽里的value獲取

簡單描述:在img標簽里的value存放了需要用到的值,但是在js中獲取的時候,我直接寫的就是$("#imgStr").val(),結果發現是空,后來查了一下,才知道,img的value需要使用attr來獲取 代碼: /…