閱讀805 返回首頁    go 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

  上一篇:go 優秀 Python 庫你值得擁有
  下一篇:go 如何說服別人多用 Python?