我之前在py问题中询问了一个关于python中相对路径的问题:How can I access relative paths in Python 2.7 when imported by different modules
所提供的答案在我的所有脚本和函数中都很有用。但是,在尝试调试IDLE(Python 2.7)中的文件时,它会生成运行时错误。
有人能指出我使用__file__
表示法的文档吗?另外,我想了解为什么IDLE在运行示例代码时会产生错误,但是从命令行运行相同的文件或双击它(对于Windows用户)则不会。
非常感谢任何帮助!
请注意,我在Windows XP上使用virtualenv运行Python 2.7(在这些测试期间未激活)。
示例代码
import os
import sys
curdir = os.path.dirname(__file__)
sys.path.append(curdir + '/..')
错误
Traceback (most recent call last):
File "C:\MyFile.py", line 3, in `<module>`
curdir = os.path.dirname(`__file__`)
NameError: name '`__file__`' is not defined
答案 0 :(得分:3)
__file__
将不会被设置。
所以:
>>> import os, sys
>>> curdir = os.path.dirname(__file__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '__file__' is not defined
预期。
__file__
是python解释器调用的文件的名称 - 所以如果你从脚本运行它,它就可以工作。
$ python curdir.py
$
(该脚本与我放入解释器的脚本完全相同,因此没有错误或输出)
从我之前使用IDLE观察到的,它充当了解释器 - 所以它将运行有问题的文件。但是,该文件没有启动,因此永远不会设置__file__
。