# 异常处理与代码调试 ## 异常处理 ### 基本语法 ```python try: # 可能引发异常的代码 result = 10 / int(user_input) except ValueError: print("请输入有效数字") except ZeroDivisionError: print("不能除以零") else: # 仅在 try 块无异常时执行 print(f"结果:{result}") finally: # 无论是否有异常都执行 print("清理资源") ``` ### 主动抛出异常 ```python 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}") ``` ### 自定义异常 ```python class AuthError(Exception): """认证异常""" def __init__(self, msg, code=401): self.msg = msg self.code = code super().__init__(msg) ``` ## 代码调试 ### print 调试 最简单但不够优雅,适合快速定位: ```python def divide(a, b): print(f"[DEBUG] a={a}, b={b}") # 临时加打印 return a / b ``` ### assert 断言 ```python def withdraw(balance, amount): assert 0 <= amount <= balance, "余额不足或金额无效" return balance - amount ``` ### pdb 调试 ```python 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 更专业的调试方式: ```python 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 调试