我创建了两个名为“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'
谁能告诉我为什么?非常感谢!
答案 0 :(得分:1)
如下划线所示,__main__
是一个神奇的模块名称。它指的是首先由Python解释器执行的模块。如果您运行python test.py
,则__main__
将成为由test.py
组成的模块。
相反,请将您的__main__.py
重命名为main.py
并使用import main
和main.main()
。
答案 1 :(得分:1)
你永远不会进口任何东西。由于您自己的文件名为__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 — Top-level script environment
要解决此问题,请将__main__.py
重命名为与内置命令不冲突的内容。
答案 2 :(得分:0)
要导入 Sub SelectFields()
Dim a As String
Dim pt As PivotTable
ThisWorkbook.Worksheets("Sheet1").Activate
a = Worksheets("Selection").Cells(3, 1).Value
For Each pt In ActiveSheet.PivotTables
With pt.PivotFields("CODE")
.ClearAllFilters
.CurrentPage = a
End With
Next
End Sub
,您需要将其放入一个文件夹中,然后 Python 会将其视为模块文件夹。
Sub CopyPivotBody()
Dim ws As Worksheet
Dim pt As PivotTable
Dim rngBody As Range
Set ws = Sheets("sheet1")
Set pt = ws.PivotTables(1)
Set rngBody = pt.TableRange1
rngBody.Copy Sheets("Selection").Range("A" & Rows.Count).End(xlUp).Offset(1)
End Sub
然后你应该把 __main__.py
放在这个文件夹之外并像这样导入 .
├── my_module
│ └── __main__.py
└── test.py
:
test.py