异常处理与代码调试
异常处理
基本语法
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 调试