在Python中,我經常發現自己通過調用諸如以下裝載包資源:Python - 通過回溯獲取調用模塊的路徑,問題?
import os
fp = open(os.path.join(os.path.dirname(os.path.realpath(__file__)),
"resource.json"), "r")
我一直在使用的庫函數考慮如下面消除這種醜陋。問題是該函數將存在於一個庫中,而不是我想要獲取該目錄的文件。我可以解決這個問題有回溯包,如下列要求:
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__)
,但如果沒有真正的理由避免更簡單的界面,我寧願使用它。