805
Python
Python3 跨目錄模塊調用,你真的懂了嗎?
小夥伴們,你們有遇到過調用自己寫的模塊(跨目錄模塊調用),提示你的情況,如果有,而且到現在還沒有搞明白的,我想說,你今天看對文章了。
這篇文章主要是講解怎麼還原一個出錯的場景,然後分析出錯原因,一步一步的解決這個問題的思路。
項目結構
項目結構
代碼內容
注意上麵腳本導入包的方式,和model1中new_student.py模塊中的導入方式有什麼不一樣
執行代碼報錯
image.png
解釋出錯原因
查看剛才的報錯信息,我們可以知道,我們在執行test.py這個文件的時候,找不到student這個對象,那麼我們找到包含“from student import get_name”的這個文件“new_student.py”,執行這個文件,沒有報錯,所以,這樣寫是絕對沒有問題的,那麼為什麼我們在外部對new_student.py這個模塊調用的時候會報錯?這裏就要涉及到我們的python導包順序了。
(1)第一步:查找執行文件所在目錄
(2)第二步:查找執行文件所屬的項目目錄
(3)第三步:查找path環境配置的目錄
根據我的實驗,其實所謂的導包順序都是根據path中配置順序來的。我們做個實驗,在test.py中將path變量打印出來,結果如下
結合我們這個問題,會執行這樣的步驟
(1)查找執行文件的所在目錄,沒有student這個對象
(2)查找項目的根目錄下,沒有student這個對象
(3)查找path中的其他目錄也是沒有這個student對象的
(4)執行上麵4個步驟之後都沒有找到這個對象,所以報錯
根據上麵的分析,多少應該有了解決思路:就是將我們student所在的目錄加入到path變量中。
解決這個問題
根據上麵步驟的分析,我們嚐試將model1這個包路徑加入到path變量中,看是否解決了問題。
在代碼中添加如下代碼
test.py模塊修改之後的代碼
運行結果
運行成功.png
到此,問題已經解決。
我們使用將path打印出來看一下
另外:我建議不要使用將相對變量的路徑加入到path中,建議使用絕對變量。方法如下
練習題
讀完這篇文章,我相信小夥伴們肯定是有收獲的,那麼我們嚐試著做一個簡單的題來鞏固一下。
為什麼new_student.py中的導包方式不會引發異常呢?
這個問題就留給小夥伴們自己想了,如果小夥伴們認真的看了我的這篇文章,我相信,你是可以找到問題所在的。
當然,你也可以選擇留言。
作者:亭子青年
簡介:一個在家帶娃的寶媽,一個熱愛學習、勤於思考的 Tester
最後更新:2017-10-08 17:38:22