ModuleNotFoundError: No module named ‘__main__.base‘; ‘__main__‘ is not a package

轉載自:https://www.cnblogs.com/xiaohaodeboke/p/12587018.html

ModuleNotFoundError: No module named '__main__.base'; '__main__' is not a package(即 if __name__=='__main__'的深入理解)
        </h1>
        <div class="clear"></div>
        <div class="postBody">

if __name__ == '__main__':  的簡要說明:

 

    每個python模塊或python文件(如下圖中的 hello1.py文件,python模塊和python文件的區別在於--python文件有.py後綴)都包含內置的變量 __name__,而__main__始終指當前執行的文件或當前路徑。當該文件被直接執行的時候,__name__ 等於文件名即等於__main__,而此時__name__將會被解析器自動賦值爲"__main__",爲字符串類型(注意__name__的值不會被賦值爲tt.hello1.py,見圖1),從而使表達式 if __name__=="__main__" 爲真。接下來看圖2,如果模塊(即tt.hello1)被 import 到其他模塊中,則該模塊的 __name__ 等於模塊名稱(不包含後綴.py),即此時__name__的值爲tt.hello1,見圖2

    一個python文件通常有兩種使用方法,第一是作爲腳本直接執行,第二是 import 到其他的 python 腳本中被調用(模塊重用)執行。因此 if __name__ == '__main__': 的作用就是控制這兩種情況執行代碼的過程。如圖1,圖2,在 if __name__ == '__main__': 下的代碼只有在第一種情況下(即文件作爲腳本直接執行)纔會被執行,而 import 到其他腳本中是不會被執行的(因爲此時的__name__=tt.hello1,表達式 if __name__=="__main__" 爲假)。

 

             

 

 

 

            

 

 

 

       接下來分析爲什麼會報錯ModuleNotFoundError: No module named '__main__.base'; '__main__' is not a package,如圖3

           

 

 

 

            圖中使用了相對路徑,發現導入失敗,.hello1  即當前路徑下的hello1模塊

           此時的 .hello1被解析成__main__.hello ,從而導致程序運行失敗,使用絕對路徑即可

           

 

<div id="blog_post_info">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章