# 类型转换与异常处理基础

URL: https://caijiao.org/python/ch02/type-exception
Source: docs/python/ch02/type-exception.md
Description: 本章节将介绍 Python 中的类型转换与异常处理。你将学习如何进行类型转换以及如何使用 'try-except' 语句处理程序中的异常。

在 [Python](/python/) 中，类型转换和异常处理是常用的编程技巧。类型转换允许你在不同的数据类型之间转换，而异常处理帮助你捕获程序中的错误，确保程序的稳定性。

## 类型转换

类型转换是将一个数据类型转换为另一个数据类型的过程。Python 提供了多种内建函数用于类型转换。

### 显式类型转换

通过内建的转换函数，你可以将一个类型的数据转换为另一个类型。

- `int()`：将数据转换为整数
- `float()`：将数据转换为浮动数
- `str()`：将数据转换为字符串
- `list()`：将可迭代对象转换为列表
- `tuple()`：将可迭代对象转换为元组
- `set()`：将可迭代对象转换为集合

示例：

```python
# 将字符串转换为整数
num_str = "123"
num = int(num_str)
print(num)  # 输出: 123

# 将整数转换为浮动数
num = float(num_str)
print(num)  # 输出: 123.0

# 将整数转换为字符串
num = 456
num_str = str(num)
print(num_str)  # 输出: "456"
```

### 自动类型转换

在 Python 中，某些情况下 Python 会自动进行类型转换。例如，当你在一个表达式中使用不同类型的操作数时，Python 会自动将它们转换为兼容的类型。

```python
x = 10  # 整数
y = 2.5  # 浮动数
result = x + y  # 自动将 x 转换为浮动数
print(result)  # 输出: 12.5
```

## 异常处理基础

在程序运行时，有时会发生错误，这些错误称为异常。Python 提供了异常处理机制，允许程序在发生异常时继续执行，而不是直接崩溃。

### `try-except` 语句

`try-except` 语句用于捕获和处理异常。基本的语法结构如下：

```python
try:
    # 可能引发异常的代码
except ExceptionType:
    # 异常处理代码
```

示例：

```python
try:
    a = 10 / 0  # 故意引发一个 ZeroDivisionError
except ZeroDivisionError:
    print("不能除以零！")
```

输出：

```
不能除以零！
```

### 捕获多个异常

你可以在同一个 `try` 语句中捕获多个不同类型的异常：

```python
try:
    x = int(input("请输入一个数字: "))
    y = 10 / x
except ValueError:
    print("输入无效，请输入一个数字！")
except ZeroDivisionError:
    print("不能除以零！")
```

在这个例子中，如果输入的是非数字，则会捕获到 `ValueError`；如果输入的是 0，则会捕获到 `ZeroDivisionError`。

### 使用 `else` 和 `finally`

- `else`：如果 `try` 块没有发生异常，则会执行 `else` 语句中的代码。
- `finally`：无论是否发生异常，`finally` 块中的代码都会执行，通常用于资源的清理工作。

示例：

```python
try:
    x = 10 / 2
except ZeroDivisionError:
    print("不能除以零！")
else:
    print("计算成功！")
finally:
    print("程序执行完毕！")
```

输出：

```
计算成功！
程序执行完毕！
```

### 自定义异常

你也可以自定义异常类来处理特定的错误。自定义异常类需要继承 `Exception` 类。

```python
class MyError(Exception):
    pass

try:
    raise MyError("这是自定义异常！")
except MyError as e:
    print(f"捕获到异常: {e}")
```

输出：

```
捕获到异常: 这是自定义异常！
```

## 总结

- 类型转换让你可以在不同的数据类型之间灵活转换。
- 异常处理帮助你捕获和处理程序中的错误，避免程序崩溃。
- 通过 `try-except` 语句，你可以处理已知的错误，使用 `else` 和 `finally` 进行额外的处理。

掌握类型转换与异常处理是编写健壮 Python 程序的基础。
