轉載自:https://www.cnblogs.com/xiaohaodeboke/p/12587018.html
</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">