侧边栏壁纸
博主头像
phphi

phphi's blog

  • 累计撰写 51 篇文章
  • 累计收到 0 条评论

Day20 - 异常处理与代码调试

2026-4-24 / 0 评论 / 1 阅读

异常处理与代码调试

异常处理

基本语法

try:
    # 可能引发异常的代码
    result = 10 / int(user_input)
except ValueError:
    print("请输入有效数字")
except ZeroDivisionError:
    print("不能除以零")
else:
    # 仅在 try 块无异常时执行
    print(f"结果:{result}")
finally:
    # 无论是否有异常都执行
    print("清理资源")

主动抛出异常

def validate_age(age):
    if age < 0 or age > 150:
        raise ValueError(f"无效的年龄值:{age}")
    return True

try:
    validate_age(200)
except ValueError as e:
    print(f"验证失败:{e}")

自定义异常

class AuthError(Exception):
    """认证异常"""
    def __init__(self, msg, code=401):
        self.msg = msg
        self.code = code
        super().__init__(msg)

代码调试

print 调试

最简单但不够优雅,适合快速定位:

def divide(a, b):
    print(f"[DEBUG] a={a}, b={b}")  # 临时加打印
    return a / b

assert 断言

def withdraw(balance, amount):
    assert 0 <= amount <= balance, "余额不足或金额无效"
    return balance - amount

pdb 调试

import pdb

def faulty_func(x):
    pdb.set_trace()  # 设置断点
    return 10 / x

常用命令:l(列出代码)、n(下一步)、s(进入函数)、p 变量名(打印变量)、c(继续执行)。

IDE 调试

PyCharm / VS Code:点击行号左侧设置断点,F9/F5 运行到断点,Watch 窗口查看变量。

日志记录

比 print 更专业的调试方式:

import logging

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

logger.debug("调试信息")
logger.info("一般信息")
logger.warning("警告信息")
logger.error("错误信息")

日志级别:DEBUG < INFO < WARNING < ERROR < CRITICAL

总结

  • 异常处理用 try/except/finally 捕获和清理错误
  • raise 主动抛出异常,自定义异常继承 Exception
  • 调试方法:print / assert / pdb / IDE 断点
  • 生产环境推荐用 logging 替代 print 调试