= 2005-07-07 调用层次 =
{{{多层次程序调试时候的相对路径错误问题   		
amingsc 	
致 python-chinese
	 更多选项	  7月6日 (9小时前)

在将程序组织成若干层次的时候,如果在底层需要设置文件的相对路径,则在调试的时候会有问题,我举例说明.
比如程序如图组织:
    |------module1.py:main
    |
    |------package
            |-------module2.py
                        |-------data
下面是代码文件:
--------------------------------module1.py 主模块:
from package.module2 import fun

fun()

-----------------------module2.py:
filename = r'package\data'

def fun():
       f= open(filename,'r')
       f.close()

if __name__ == '__main__': #调试
       fun()

---------------------------
问题:直接运行module1程序是正确的,但是我们在写程序的时候往往需要对当前的模块进行调试,
所以在写module2的时候,调试模块则会出错(因为这时文件data的相对路径应该是r'data',而不是r'package\data')

我处理这个问题的方法是:在定义filename的时候进行判断,比如:
if __name__ == '__main__':
       filename = r'data' #调试用
else:
       filename = r'package\data'

但是这里又有个问题,就是如果程序的层次再增加几层的话,在每层分别进行调试的时候会出现一样的路径错误

不知道大家在处理这个问题的时候怎么弄的?有没有更现代的办法?


_______________________________________________
		
		
Qiangning Hong 	
致 python-chinese
	 更多选项	  7月6日 (9小时前)
On 7/6/05, amingsc <amingsc@163.com> wrote:
> 在将程序组织成若干层次的时候,如果在底层需要设置文件的相对路径,则在调试的时候会有问题,我举例说明.
> 比如程序如图组织:
>      |------module1.py:main
>      |
>      |------package
>              |-------module2.py
>                          |-------data
> 下面是代码文件:
[...]
> -----------------------module2.py:
> filename = r'package\data'

这里改成:

import os.path
filename = os.path.join(os.path.dirname(__file__), 'data')

[...]
> 问题:直接运行module1程序是正确的,但是我们在写程序的时候往往需要对当前的模块进行调试,
> 所以在写module2的时候,调试模块则会出错(因为这时文件data的相对路径应该是r'data',而不是r'package\data')
[...]


_______________________________________________
		
limodou 	
致 python-chinese
	 更多选项	  8:30 (38分钟前)
简单的方法我想也许是将顶层目录加入到sys.path,然后从头导入模块。
}}}