Python os.path.dirname获取上级目录拼接文件报TypeError问题
报错诱因
报错的核心原因是括号位置错误:
- 你提前闭合了
os.path.join()的调用,没有把文件名fname作为参数传入join做路径拼接 - 你在
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
相关产品推荐
相关产品推荐

