当前位置:首页>python>Python 学习的第 5 天:异常处理和程序调试,新手的关键一关

Python 学习的第 5 天:异常处理和程序调试,新手的关键一关

  • 2026-08-26 06:47:30
Python 学习的第 5 天:异常处理和程序调试,新手的关键一关

大家好,我是大华!

Python 的学习来到了第5天,今天来看看异常的处理和程序调试。

第一部分:异常处理基础

1.1 什么是异常?

看看没有异常处理的程序会发生什么

print("程序开始...")# 这些代码会引发异常result = 10 / 0          # ZeroDivisionError: division by zeroprint("程序结束...")     # 这行永远不会执行

1.2 基本的try-except结构

最基本的异常捕获

print("程序开始...")try:    result = 10 / 0    print(f"结果是:{result}")except:    print("哎呀,出错了!")print("程序继续执行...")  # 程序不会崩溃,继续执行

输出结果

程序开始...哎呀,出错了!程序继续执行...

第二部分:精确异常处理

2.1 捕获特定类型的异常

方法1:捕获特定异常

try:    number = int(input("请输入一个数字:"))    result = 10 / number    print(f"10除以{number}的结果是:{result}")except ZeroDivisionError:    print("错误:除数不能为零!")except ValueError:    print("错误:请输入有效的数字!")

输出结果

# 在输入0点情况下输出请输入一个数字:0错误:除数不能为零!# 输入非0的情况下,比如我这里输入10请输入一个数字:1010除以10的结果是:1.0

方法2:捕获多个异常

try:    file = open("不存在的文件.txt", "r")    content = file.read()except (FileNotFoundError, PermissionError):    print("无法打开文件,请检查文件是否存在和权限")

2.2 获取异常信息

try:    num = int("abc")except ValueError as e:    print(f"发生值错误:{e}")    print(f"异常类型:{type(e)}")    print(f"异常消息:{str(e)}") 

输出结果

发生值错误:invalid literal for int() with base 10: 'abc'异常类型:<class 'ValueError'>异常消息:invalid literal for int() with base 10: 'abc'

2.3 完整的try-except-else-finally结构

def divide_numbers(a, b):    try:        result = a / b    except ZeroDivisionError:        print("除数不能为零!")        return None    except TypeError:        print("请输入数字类型!")        return None    else:        print("计算成功!")        return result    finally:        print("无论是否发生异常,都会执行这里")        print("通常用于清理资源,如关闭文件、数据库连接等")# 测试print(divide_numbers(10, 2))   # 正常情况print(divide_numbers(10, 0))   # 除零错误print(divide_numbers(10, "2")) # 类型错误

输出结果

计算成功!无论是否发生异常,都会执行这里通常用于清理资源,如关闭文件、数据库连接等5.0除数不能为零!无论是否发生异常,都会执行这里通常用于清理资源,如关闭文件、数据库连接等None请输入数字类型!无论是否发生异常,都会执行这里通常用于清理资源,如关闭文件、数据库连接等None

第三部分:程序调试思维

3.1 常见的调试方法

方法1:print调试法(最简单直接)

def calculate_average(scores):    print(f"调试:输入的数据是 {scores}")  # 查看输入    total = sum(scores)    print(f"调试:总和是 {total}")        # 查看中间结果    average = total / len(scores)    print(f"调试:平均值是 {average}")    # 查看最终结果    return averagescores = [80, 90, 85, 95, 100]average = calculate_average(scores)print(f"平均分是 {average}")

这里使用了一个计算总和的内置函数 sum()。

输出结果

调试:输入的数据是 [80, 90, 85, 95, 100]调试:总和是 450调试:平均值是 90.0平均分是 90.0

方法2:使用assert断言

def calculate_discount(price, discount_rate):    assert price > 0, "价格必须大于0"    assert 0 <= discount_rate <= 1, "折扣率必须在0-1之间"    discounted_price = price * (1 - discount_rate)    return discounted_price# 测试断言print(calculate_discount(100, 0.2))  # 正常# print(calculate_discount(-100, 0.2))  # 触发断言:AssertionError: 价格必须大于0

3.2 使用logging进行调试

import logging# 配置日志logging.basicConfig(    level=logging.DEBUG,  # 设置日志级别    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')def process_data(data):    logging.debug(f"开始处理数据:{data}")    try:        result = sum(data) / len(data)        logging.info(f"数据处理成功,结果:{result}")        return result    except ZeroDivisionError:        logging.error("数据列表为空")        return None    except TypeError as e:        logging.error(f"数据类型错误:{e}")        return None# 测试process_data([1, 2, 3, 4, 5])process_data([])process_data([1, '2', 3])

输出结果

2026-02-02 08:58:33,438 - root - DEBUG - 开始处理数据:[1, 2, 3, 4, 5]2026-02-02 08:58:33,439 - root - INFO - 数据处理成功,结果:3.02026-02-02 08:58:33,439 - root - DEBUG - 开始处理数据:[]2026-02-02 08:58:33,439 - root - ERROR - 数据列表为空2026-02-02 08:58:33,439 - root - DEBUG - 开始处理数据:[1, '2', 3]2026-02-02 08:58:33,439 - root - ERROR - 数据类型错误:unsupported operand type(s) for +: 'int' and 'str'

3.3 使用pdb进行交互式调试

import pdbdef find_bug_in_code(numbers):    total = 0    count = 0    # 在这里设置断点    pdb.set_trace()  # 程序会在这里暂停,进入调试模式    for num in numbers:        total += num        count += 1    average = total / count  # 这里可能有bug!    return averagefind_bug_in_code([10, 20, 30, 40, 50])

在pdb调试模式中可以:

  • • n - 执行下一行
  • • c - 继续执行
  • • q - 退出调试
  • • p 变量名 - 打印变量值
  • • l - 查看当前代码位置

这是我在vscode的调试示例

今天的内容没有很多,如果有不对或者需要补充的地方,欢迎指正。

如果你觉得文章写的还不错,不妨点赞、推荐,转发给你的朋友看一下。

最新文章

随机文章