# 文件路径与异常处理

URL: https://caijiao.org/python/ch07/paths
Source: docs/python/ch07/paths.md
Description: 本章讲解如何在 Python 中操作文件路径，结合异常处理机制，提升文件操作的健壮性与跨平台兼容性。

文件路径在处理文件操作时至关重要，尤其是跨平台开发中路径格式的差异。[Python](/python/) 提供了强大的 `os` 和 `pathlib` 模块，以及完善的异常处理机制来提升程序的健壮性。

## 文件路径基础

操作系统路径分隔符不同：

- Windows：`\`（反斜杠）
- macOS/Linux：`/`（正斜杠）

避免硬编码路径，推荐使用 `os.path` 或 `pathlib`：

```python
import os

# 拼接路径
path = os.path.join("folder", "file.txt")
print(path)
```

## 使用 pathlib 管理路径

`pathlib` 提供面向对象的路径操作方式，是现代 Python 推荐的路径处理方法：

```python
from pathlib import Path

p = Path("folder") / "file.txt"
print(p)
```

判断文件或目录是否存在：

```python
if p.exists():
    print("文件存在")
if p.is_file():
    print("这是一个文件")
```

创建目录：

```python
p = Path("data/output")
p.mkdir(parents=True, exist_ok=True)
```

## 文件不存在的处理方式

尝试打开一个不存在的文件时，会抛出 `FileNotFoundError`：

```python
try:
    with open("nofile.txt", "r") as f:
        print(f.read())
except FileNotFoundError:
    print("文件不存在，请检查路径")
```

## 异常处理基础

常见的文件相关异常：

| 异常类型            | 描述                     |
| ------------------- | ------------------------ |
| `FileNotFoundError` | 文件未找到               |
| `PermissionError`   | 权限不足                 |
| `IsADirectoryError` | 路径是一个目录而不是文件 |
| `IOError`           | 通用输入输出错误         |

通用异常处理语法：

```python
try:
    # 可能出错的操作
    with open("example.txt") as f:
        data = f.read()
except Exception as e:
    print(f"发生错误: {e}")
```

## 推荐做法

- 使用 `pathlib` 代替字符串拼路径；
- 所有文件操作都应考虑异常处理；
- 提前判断文件是否存在，可减少不必要错误；
- 错误信息尽量友好提示用户。

## 总结

- 文件路径的处理应跨平台、可维护；
- `os.path` 和 `pathlib` 都能进行路径拼接与判断；
- 利用 `try-except` 捕获文件异常，提升程序鲁棒性；
- 良好的路径管理与异常处理是文件操作的基础保障。
