Python之异常处理

        前言

一、异常处理的基本语法

1、基础结构:

2、多异常捕获

3、else 和 finally 块

 二、常见内置异常类型

三、相关函数与关键字

1、raise:

 2、assert:

3、自定义异常类

4、sys.exc_info()

5、traceback 模块

四、进阶用法与示例

1、异常链(Python 3+) 

2、上下文管理器自动处理资源

3、日志记录异常

4、处理文件操作异常

前言

最近在学习Python,将所学内容整理成文章,以便以后翻阅和复习,同时分享给大家。有问题欢迎随时指正。

一、异常处理的基本语法

异常处理机制(Exception Handling)捕获和处理运行时错误,防止程序崩溃。异常是程序执行期间发生的错误事件(如除以零、文件未找到等),是管理程序运行时错误的核心机制。通过合理的异常处理,可以增强代码的健壮性,避免程序因意外错误而崩溃。

1、基础结构

try + except

try:
    # 可能引发异常的代码
    result = 10 / 0
except ZeroDivisionError:
    print("捕获到除零错误!")

2、多异常捕获

try:
    x = int(input("请输入数字: "))
    print(10 / x)
except ValueError:
    print("输入无效,非整数!")
except ZeroDivisionError:
    print("除数不能为零!")
except Exception as e:  # 捕获其他所有异常
    print(f"未知错误: {e}")

3、else 和 finally 块

try:
    print("尝试执行代码...")
except Exception as e:
    print(f"错误: {e}")
else:
    print("无异常时执行此处")
finally:
    print("无论是否异常,最终执行此处(如释放资源)")

 二、常见内置异常类型

  • ValueError:值错误(如将字符串转换为非数字)

  • TypeError:类型错误(如对数字和字符串进行加法)

  • IndexError:索引越界

  • KeyError:字典键不存在

  • FileNotFoundError:文件未找到

  • ZeroDivisionError:除数为零

  • Exception:所有异常的基类

三、相关函数与关键字

1、raise

手动抛出异常

def check_age(age):
    if age < 0:
        raise ValueError("年龄不能为负数!")

try:
    check_age(-5)
except ValueError as e:
    print(e)

 2、assert

断言条件

def calculate_average(numbers):
    assert len(numbers) > 0, "列表不能为空"
    return sum(numbers) / len(numbers)

try:
    avg = calculate_average([])
except AssertionError as e:
    print(f"断言失败: {e}")

3、自定义异常类

class MyCustomError(Exception):
    def __init__(self, message, code):
        super().__init__(message)
        self.code = code

try:
    raise MyCustomError("自定义错误", 1001)
except MyCustomError as e:
    print(f"错误代码: {e.code}, 信息: {e}")

4、sys.exc_info()

获取异常详情

import sys

try:
    raise TypeError("类型错误示例")
except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print(f"异常类型: {exc_type}, 信息: {exc_value}")

5、traceback 模块

打印完整堆栈

import traceback

try:
    open("不存在的文件.txt")
except FileNotFoundError:
    traceback.print_exc()  # 输出详细错误位置

四、进阶用法与示例

1、异常链(Python 3+) 

def read_file(filename):
    try:
        with open(filename) as f:
            return f.read()
    except FileNotFoundError as e:
        raise ValueError("文件读取失败") from e  # 保留原始异常

try:
    read_file("missing.txt")
except ValueError as e:
    print(f"最终错误: {e}")
    print(f"原始错误: {e.__cause__}")

2、上下文管理器自动处理资源

with open("data.txt", "r") as f:
    try:
        content = f.read()
    except UnicodeDecodeError:
        print("文件编码错误!")

3、日志记录异常

import logging

logging.basicConfig(level=logging.ERROR)

try:
    x = 1 / 0
except Exception as e:
    logging.error(f"运行时错误: {e}", exc_info=True)  # 记录详细日志

4、处理文件操作异常

try:
    with open("nonexistent_file.txt", "r") as f:
        content = f.read()
except FileNotFoundError:
    print("文件未找到!")
except Exception as e:
    print(f"未知错误:{e}")
else:
    print("文件内容:", content)

你可能感兴趣的:(Python,python,开发语言)