全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-19 5 分钟 ✍️ juanwangdev

Python多异常捕获

Python 支持多种方式捕获多个异常类型,提高代码健壮性。

元组捕获多种异常

单个 except 捕获多种异常

Python
try:
    value = int(input("输入数字: "))
    result = 10 / value
except (ValueError, ZeroDivisionError):
    print("输入错误或除零错误")

获取异常对象

Python
try:
    value = int(input("输入数字: "))
    result = 10 / value
except (ValueError, ZeroDivisionError) as e:
    print(f"发生错误: {type(e).__name__} - {e}")

多个 except 分块

分别处理不同异常

Python
try:
    value = int(input("输入数字: "))
    result = 10 / value
except ValueError:
    print("请输入有效数字")
except ZeroDivisionError:
    print("不能输入0")

不同异常不同处理逻辑

Python
try:
    file = open("data.txt", "r")
    content = file.read()
    file.close()
except FileNotFoundError:
    print("文件不存在,创建新文件")
    file = open("data.txt", "w")
except PermissionError:
    print("无权限访问文件")
except IOError as e:
    print(f"读写错误: {e}")

异常捕获顺序

从具体到一般

Python
try:
    do_something()
except ValueError:       # 具体异常先捕获
    print("值错误")
except Exception:        # 一般异常后捕获
    print("其他错误")

顺序错误示例

Python
try:
    do_something()
except Exception:        # 先捕获所有异常
    print("错误")
except ValueError:       # ValueError 已被 Exception 捕获,永远不执行
    print("值错误")

子类异常必须在父类异常之前捕获。

异常继承关系

Python 异常层级

text
BaseException
├── SystemExit
├── KeyboardInterrupt
├── GeneratorExit
└── Exception
    ├── StopIteration
    ├── ArithmeticError
    │   ├── ZeroDivisionError
    │   ├── FloatingPointError
    ├── LookupError
    │   ├── IndexError
    │   ├── KeyError
    ├── ValueError
    ├── TypeError
    ├── OSError
    │   ├── FileNotFoundError
    │   ├── PermissionError

捕获父类异常

Python
try:
    result = 10 / 0
except ArithmeticError:  # 捕获 ZeroDivisionError 的父类
    print("算术错误")

实际应用

文件操作多异常

Python
try:
    with open("data.txt", "r") as f:
        data = f.read()
        value = int(data)
except (FileNotFoundError, PermissionError):
    print("文件访问错误")
except ValueError:
    print("文件内容格式错误")

网络请求多异常

Python
import requests

try:
    response = requests.get("https://api.example.com", timeout=5)
    data = response.json()
except requests.Timeout:
    print("请求超时")
except requests.ConnectionError:
    print("连接失败")
except requests.RequestException:  # 其他请求异常
    print("请求错误")
except ValueError:  # JSON 解析错误
    print("响应格式错误")

数据处理

Python
def process_data(data):
    try:
        value = int(data["value"])
        result = 100 / value
        return result
    except KeyError:
        print("缺少 value 字段")
    except (ValueError, TypeError):
        print("value 格式错误")
    except ZeroDivisionError:
        print("value 不能为 0")
    return None

统一处理与分类处理

统一处理

Python
# 多异常同一处理逻辑
try:
    risky_operation()
except (ValueError, TypeError, KeyError) as e:
    log_error(e)
    handle_error()

分类处理

Python
# 多异常不同处理逻辑
try:
    risky_operation()
except ValueError:
    handle_value_error()
except TypeError:
    handle_type_error()
except KeyError:
    handle_key_error()

要点总结

  1. 元组 (A, B) 在单个 except 中捕获多种异常
  2. 多个 except 分块分别处理不同异常
  3. 捕获顺序:具体异常 → 父类异常 → 一般异常
  4. Exception 是大多数异常的父类
  5. 统一处理用元组,分类处理用多个 except

📝 发现内容有误?点击此处直接编辑

← 上一篇 Python try-except语句
下一篇 → Python异常类型
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库