You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何实现无需传参即可获取调用方脚本路径的函数

实现方案

你之前写法失效的核心原因是:函数的默认参数file=__file__会在b.py被导入加载时就固定绑定为b.py自身的路径,不会在函数被调用时动态变成调用方的文件路径。

要实现不传__file__自动获取调用方脚本所在目录,直接用Python标准库inspect模块读取调用栈信息即可,不需要额外传参。

改造后的工具函数代码

修改bb/b.py的内容如下:

# bb/b.py
import pathlib
import inspect

def get_current_path():
    # 取调用栈的上1帧,即当前函数的直接调用方上下文
    caller_frame = inspect.stack()[1]
    # 从调用方的全局变量字典中读取__file__属性
    caller_file = caller_frame.frame.f_globals.get("__file__")
    # 兜底处理:交互环境、动态执行代码等无对应文件的场景,返回当前工作目录
    if not caller_file:
        return pathlib.Path().resolve()
    return pathlib.Path(caller_file).parent.resolve()

调用方式

在a.py中直接调用即可,不需要传入__file__参数:

# a.py
import bb.b
print(bb.b.get_current_path())  # 正确返回a.py所在的目录路径

注意事项

  • 该方案完全基于Python标准库实现,无需安装第三方依赖
  • 如果存在多层函数嵌套、装饰器包裹get_current_path的场景,需要对应调整inspect.stack()取的帧索引,当前索引值1对应直接调用该函数的上下文,是常规使用场景下的正确值
  • 兜底逻辑可以根据自己的业务需求调整,比如在拿不到调用方文件路径时抛出异常也可以

内容的提问来源于stack exchange,提问作者Curious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:21:36