侧边栏壁纸
博主头像
路小飞博主等级

行动起来,活在当下

  • 累计撰写 72 篇文章
  • 累计创建 12 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

2.4 异常处理

路小飞
2025-07-10 / 0 评论 / 0 点赞 / 3 阅读 / 5663 字

Python异常处理

2.4.1 基础概念

1 什么是异常

异常(Exception)是程序运行时发生的错误或异常情况。当Python程序遇到无法正常处理的情况时,会抛出异常。如果不处理这些异常,程序会崩溃并显示错误信息。

2 异常的类型

Python中的异常分为两大类:

  • 内置异常:Python预定义的异常类型
  • 自定义异常:用户自己定义的异常类型

Python中常见的异常类型:

  • SyntaxError:语法错误
  • NameError:未定义变量
  • TypeError:类型错误
  • ValueError:值错误
  • FileNotFoundError:文件未找到
  • ZeroDivisionError:除零错误
3 异常处理关键字详解
try
  • 作用:标记可能发生异常的代码块
  • 含义:尝试执行这段代码,如果出现异常则跳转到except块处理
  • 特点:必须与except、finally或else配合使用
except
  • 作用:捕获并处理try块中抛出的异常
  • 语法except [异常类型] [as 变量名]:
  • 含义:当try块中发生指定类型的异常时,执行except块中的代码
  • 示例
    except ValueError:  # 只捕获ValueError
    except Exception as e:  # 捕获所有异常,e是异常对象
    
else
  • 作用:当try块中没有异常发生时执行的代码
  • 含义:只有在try块成功执行(无异常)时才运行
  • 特点:必须放在except之后,finally之前
finally
  • 作用:无论是否发生异常都会执行的代码
  • 含义:通常用于清理资源(关闭文件、数据库连接等)
  • 特点:即使try或except中有return语句,finally也会执行
raise
  • 作用:主动抛出异常
  • 含义:用于在代码中手动触发异常
  • 示例
    raise ValueError("输入值无效")
    raise  # 重新抛出当前异常
    
with
  • 作用:上下文管理器,自动处理资源的获取和释放
  • 含义:确保资源在使用完毕后被正确释放
  • 示例
    with open("file.txt") as f:  # 自动关闭文件
        data = f.read()
    
as
  • 作用:将异常对象赋值给变量
  • 含义:用于在except块中获取异常的详细信息
  • 示例
    except Exception as e:
        print(f"错误信息: {e}")
    

2.4.2 异常处理语法

基本语法
try:
    # 可能出错的代码
    result = 10 / 0
except ZeroDivisionError:
    print("除数不能为零")
处理多种异常
try:
    number = int(input("请输入数字: "))
    result = 10 / number
except ValueError:
    print("输入无效")
except ZeroDivisionError:
    print("除数不能为零")
except Exception as e:
    print(f"其他错误: {e}")
完整语法
try:
    file = open("data.txt", "r")
    data = file.read()
except FileNotFoundError:
    print("文件未找到")
else:
    print("读取成功")
finally:
    if 'file' in locals():
        file.close()

2.4.3 最佳实践

使用with语句
# 自动处理文件关闭
with open("data.txt", "r") as file:
    data = file.read()
自定义异常
class ValidationError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(message)

def validate_age(age):
    if age < 0:
        raise ValidationError("年龄不能为负数")
    return True

2.4.4 实际应用

数据库操作
import sqlite3

def get_user(user_id):
    try:
        conn = sqlite3.connect('users.db')
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
        return cursor.fetchone()
    except sqlite3.OperationalError as e:
        print(f"数据库错误: {e}")
        return None
    finally:
        if 'conn' in locals():
            conn.close()
网络请求
import requests

def fetch_data(url):
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.Timeout:
        print("请求超时")
    except requests.exceptions.ConnectionError:
        print("连接错误")
    except Exception as e:
        print(f"未知错误: {e}")
    return None
文件处理
import json

def read_json(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return json.load(file)
    except FileNotFoundError:
        print("文件不存在")
    except json.JSONDecodeError:
        print("JSON格式错误")
    except Exception as e:
        print(f"读取错误: {e}")
    return None

2.4.5 关键要点

  1. 使用具体异常类型而不是通用Exception
  2. 合理使用try-except-else-finally结构
  3. 使用with语句自动管理资源
  4. 记录异常信息便于调试
  5. 避免过度使用异常处理,考虑性能影响
0

评论区