簡體   English   中英

我將一個python文件命名為“__main__.py”,並且我在另一個文件中導入了__main__,無法運行__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 mainmain.main()

你永遠不會進口任何東西。 由於您自己的文件被命名為__main__ (這是真的,因為__name__返回'__main__' ),無論您給文件起什么名字。

除了正在運行的文件之外,您實際上從未真正導入任何內容:

通過解釋器運行它以了解我的意思。

>>>def hello(): print('HELLO')
...
>>>import __main__
>>>__main__.hello()
HELLO
>>>
>>>
>>>__main__
<module '__main__' (built-in)>

您可以很清楚地看到__main__是一個內置命令,而__main__.py永遠不會被導入,只有原始腳本。

當從標准輸入、腳本或交互式提示中讀取時,模塊的__name__被設置為等於'__main__'

29.4。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM