【发布时间】:2015-11-04 23:03:59
【问题描述】:
在python中,我经常发现自己通过如下调用来加载包资源:
import os
fp = open(os.path.join(os.path.dirname(os.path.realpath(__file__)),
"resource.json"), "r")
我一直在考虑使用如下库函数来消除这种丑陋。问题是该函数将存在于库中,而不是我想要获取目录的文件中。我可以通过 traceback 包解决这个问题,例如:
import os, traceback
def with_module_directory(filename):
return os.path.join(os.path.dirname(traceback.extract_stack()[-2][0]),
filename)
现在如果with_module_directory() 存在于/home/user1/mylibs/utils.py 中,当/home/user1/myscripts 中的模块调用with_module_directory("resource.json") 时,结果将是"/home/user1/myscripts/resource.json",根据需要。
但我担心这样做在某种程度上是危险的。手动查看堆栈跟踪感觉通常是一件坏事,就像我打破了封装一样。但是我想不出任何具体的问题,所以我提出了一个问题:任何人都可以想到这样做可能会产生的问题吗?出于任何特定原因,这是不好的做法吗?
注意:我知道我可以强制用户拨打with_module_path("resource.json", __file__) 之类的电话,但如果没有实际理由避免使用更简单的界面,那么我更愿意使用它。
【问题讨论】:
标签: python module path traceback