假设你的项目结构如下:
pythonProject2/
│
├── config/
│ └── test.yaml <-- 你的 YAML 配置文件
├── src/
│ └── test_cases/
│ └── test_login.py <-- 你的测试文件
└── config_read.py <-- 你封装的 YAML 读取函数
问题分析
在你的测试文件 test_login.py
中,你正在调用 read_yaml(file_path='config')
,这会导致问题,因为相对路径不正确,程序无法找到 config
文件。
解决方案
1. 使用相对路径
你可以使用相对路径来访问 config
目录中的 YAML 文件。从 test_login.py
到 test.yaml
的相对路径是 ../../../../config/test.yaml
,即从 test_cases/test_login
目录向上返回四级,然后进入 config
目录。
# test_login.py
from config.yaml_read import read_yaml # 确保正确导入 read_yaml 函数if __name__ == "__main__":yaml_file_path = "../../../../config/test.yaml" # 相对路径config = read_yaml(file_path=yaml_file_path)print(config)
2. 使用绝对路径(调试时)
为了避免相对路径的问题,你可以使用绝对路径来调试。你可以直接指定 YAML 文件的完整绝对路径:
# test_login.py
from config.yaml_read import read_yamlif __name__ == "__main__":yaml_file_path = "D:/pycharmdome/pythonProject2/config/test.yaml" # 绝对路径config = read_yaml(file_path=yaml_file_path)print(config)
3. 动态获取项目根目录路径
为了避免硬编码路径,你可以使用 os
模块动态获取项目根目录,并基于根目录构造文件路径。例如:
import os# 获取项目根目录
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))# 构造 YAML 文件的绝对路径
yaml_file_path = os.path.join(project_root, 'config', 'test.yaml')# 调用 read_yaml 函数
from config.yaml_read import read_yamlif __name__ == "__main__":config = read_yaml(file_path=yaml_file_path)print(config)
4. 检查文件是否存在
在读取文件之前,你可以检查文件是否存在,以确保路径正确:
import osif __name__ == "__main__":yaml_file_path = "../../../../config/test.yaml" # 相对路径if os.path.exists(yaml_file_path):config = read_yaml(file_path=yaml_file_path)print(config)else:print(f"File not found: {yaml_file_path}")
示例代码
假设你选择使用相对路径,完整的 test_login.py
文件可能如下所示:
# test_login.py
from config.yaml_read import read_yaml
import osif __name__ == "__main__":# 使用相对路径yaml_file_path = "../../../../config/test.yaml"# 检查文件是否存在if os.path.exists(yaml_file_path):config = read_yaml(file_path=yaml_file_path)print(config)else:print(f"File not found: {yaml_file_path}")
总结
- 相对路径:使用相对路径时,确保路径相对于运行测试文件的当前工作目录是正确的。
- 绝对路径:调试时可以使用绝对路径,以确保路径问题不会影响文件读取。
- 动态路径:可以通过
os
模块动态获取项目根目录,并基于根目录构造文件路径。 - 文件存在检查:在读取文件之前,使用
os.path.exists()
检查文件是否存在,以避免路径错误导致的异常。