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