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

Python os.path.dirname获取上级目录拼接文件报TypeError问题

报错诱因

报错的核心原因是括号位置错误:

  1. 你提前闭合了os.path.join()的调用,没有把文件名fname作为参数传入join做路径拼接
  2. 你在open()的入参位置额外套了一层圆括号,把os.path.join()返回的上级目录字符串、fname两个值包成了一个二元元组

open()函数只接受字符串、字节串或者路径类对象作为入参,收到元组就会抛出你看到的类型错误。
你之前的print语句输出目录和文件名用空格隔开,也是同样的问题:你给print传了两个独立参数(join返回的目录路径、fname),而不是一个拼接好的完整路径,所以输出内容里缺少目录和文件名之间的路径分隔符。

修正方案

把所有需要拼接的路径片段全部放到os.path.join()的括号内部即可,推荐把路径分段定义,避免括号嵌套写错,修正后代码如下:

import os

def read(fname):
    # 获取当前setup.py文件所在目录的绝对路径
    current_dir = os.path.dirname(os.path.abspath(__file__))
    # 取上一级目录
    parent_dir = os.path.dirname(current_dir)
    # 拼接得到Readme.Md的完整路径
    readme_path = os.path.join(parent_dir, fname)
    # 显式指定编码读文件,避免跨系统乱码,用with自动管理文件句柄
    with open(readme_path, encoding='utf-8') as f:
        return f.read()

long_description = read('Readme.Md')

修正后拼接得到的文件路径为/data/jenkins/pypi/fabundle_env/fa-bundle/Readme.Md,正好对应你脚本所在目录上一级的Readme文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:33:23