![](/img/trans.png)
[英]how should I change "__main__" str to run file that has if __name__=="__main__":
[英]I name a python file as “__main__.py”, and I import __main__ in another file, can't run the functions in __main__
我創建了兩個名為“test.py”和__main__.py
python 文件。
在 test.py 中:
import __main__
在__main__.py
:
print(__name__)
但是當我運行 test.py 時,它什么都不輸出。
然后,我將__main__.py
更改為:
def main():
print("ok")
和 test.py:
import __main__
__main__.main()
當我運行 test.py 時,出現錯誤:
Traceback (most recent call last):
File "/Users/lyz/test.py", line 2, in <module>
__main__.main()
AttributeError: module '__main__' has no attribute 'main'
誰能告訴我為什么? 非常感謝!
如下划線所示, __main__
是一個神奇的模塊名稱。 它指的是 Python 解釋器首先執行的模塊。 如果你運行python test.py
, __main__
將是test.py
形成的模塊。
相反,將您的__main__.py
重命名為main.py
並使用import main
和main.main()
。
你永遠不會進口任何東西。 由於您自己的文件被命名為__main__
(這是真的,因為__name__
返回'__main__'
),無論您給文件起什么名字。
除了正在運行的文件之外,您實際上從未真正導入任何內容:
通過解釋器運行它以了解我的意思。
>>>def hello(): print('HELLO')
...
>>>import __main__
>>>__main__.hello()
HELLO
>>>
>>>
>>>__main__
<module '__main__' (built-in)>
您可以很清楚地看到__main__
是一個內置命令,而__main__.py
永遠不會被導入,只有原始腳本。
當從標准輸入、腳本或交互式提示中讀取時,模塊的
__name__
被設置為等於'__main__'
。
要解決此問題,請將__main__.py
重命名為與內置命令不沖突的名稱。
要導入__main__.py
您需要將其放入一個文件夾中,然后 Python 會將其視為模塊文件夾。
.
├── my_module
│ └── __main__.py
└── test.py
然后你應該把test.py
放在這個文件夾之外並像這樣導入__main__.py
:
# test.py
from my_module import __main__
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.