我有一个简单的问题,我在python文档中找到答案时遇到了问题。
文件名= Test_.py
import __main__
def test():
print('test text')
if __name__ == "__main__":
print(__main__.__file__)
test()
当我从cmd行运行它时,它返回:
c:\Python27\Test_.py
'test text'
但如果我通过单击'run'(F5)从python运行它,我会得到。
Traceback (most recent call last):
File "C:\Python27\Test_.py", line 7, in <module>
print(__main__.__file__)
AttributeError: 'module' object has no attribute '__file__'
为什么我可以从命令行运行它并且它工作正常,但如果我从python运行它我得到一个错误。当我从python运行它时,有没有办法获得c:\Python27\Test_.py
。
答案 0 :(得分:6)
从文件运行脚本时,__main__
模块实际上就是该文件。另一方面,在Python解释器提示符中,__main__
模块只是解释器的默认命名空间,特别是交互式提示符正在运行,并且没有与之关联的文件(松散地说文件是<stdin>
)。
当您点击F5以在空闲状态下运行代码时,如果您只是直接将该代码复制/粘贴到解释器中,那么它就等效。它无法与该文件建立任何关联。
另一方面,如果您运行import Test_
,那么该文件中的代码现在与Test_
模块相关联,您会发现Test_.__file__
提供了相关的文件名。
对于它的价值,import __main__
几乎没有任何理由。如果您希望脚本打印文件,那么它就用完了,您可以:
if __name__ == '__main__':
print __file__
其他可能性。