ModuleNotFoundError: No module named '__main__.base'; '__main__' is not a package(即 if __name__=='__main__'的深入理解)


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 ,從而導致程序運行失敗,使用絕對路徑即可

           

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM