python学习笔记 | 12.0、错误、调试和测试

一、程序为什么会出错?(3 大类原因)

程序运行报错,只有这 3 种情况:

  1. 代码写错了(Bug)

    比如:整数当成列表用、语法写错、缩进错误。

    ✅ 必须改代码修复。

  2. 用户输入乱搞

    比如:让输数字,用户输字母;让输邮箱,用户输空。

    ✅ 加判断就能解决。

  3. 外部环境出问题(异常)

    比如:写文件时磁盘满了、断网、文件被删了。

    ✅ 无法预测,必须用异常处理


二、Python 错误处理:try-except 最核心用法

1. 编程思路

遇到可能出错 try 出错了怎么办 → 写在

不管错不错都要执行 → 写在 finally

2. 万能模板(小白直接背)

复制代码
try:
    # 可能会报错的代码
except 错误类型:
    # 出错后执行的代码
else:
    # 没出错才执行
finally:
    # 无论如何都执行(关闭文件、断开网络等)

3. 实例 1:最常见的 除零错误

复制代码
# 代码
try:
    result = 10 / 0  # 这里一定会报错
except ZeroDivisionError:
    print("错误:不能除以0!")
else:
    print("计算结果:", result)
finally:
    print("程序执行完毕")

运行结果:

复制代码
错误:不能除以0!
程序执行完毕

解析:

  • 10/0 触发 ZeroDivisionError
  • 直接跳到 except 执行
  • finally 无论对错都会运行

4. 实例 2:用户输入错误(ValueError)

复制代码
try:
    age = int(input("请输入年龄:"))  # 输字母会报错
except ValueError:
    print("错误:必须输入数字!")

解析:

int() 只能转数字,输字母会触发。


5. 实例 3:捕获所有错误(新手常用)

复制代码
try:
    a = 1
    a.append(2)  # 整数没有append方法,会报错
except Exception as e:  # 捕获所有错误
    print("出错啦:", e)

运行结果:

复制代码
出错啦: 'int' object has no attribute 'append'

Python 异常分层:

BaseException(所有异常祖宗)

系统退出类异常(SystemExitKeyboardInterrupt等,不归 Exception 管)

except Exception = 拦截Exception 子类的全部报错 ,不止AttributeError

三、Python 调试:怎么找到错在哪?

1. 最简单调试法:print () 打印变量

小白最实用,直接看变量值对不对。

复制代码
a = 5
b = 3
print("a =", a)  # 调试用
print("b =", b)
print(a + b)

2. 专业调试:pdb 单步执行

命令行运行:

复制代码
python -m pdb 你的文件.py

常用命令:

  • n 下一步
  • p 变量名 查看变量
  • q 退出

四、Python 测试:保证代码不出错

1. 为什么要测试?

改代码后,一键验证功能没坏

2. 单元测试(简单例子)

测试一个加法函数对不对:

复制代码
# 要测试的函数
def add(x, y):
    return x + y

# 测试代码
def test_add():
    assert add(1, 2) == 3   # 正确就继续,错误就崩溃
    assert add(-1, 1) == 0  ##assert断言
    print("所有测试通过!")

test_add()

解析:

assert 条件:条件不成立直接报错。 这就是最基础的。


五、常见 Python 错误中文对照表(必看)

表格

错误英文 中文意思 常见原因
SyntaxError 语法错误 少冒号、括号不匹配
IndentationError 缩进错误 空格和 Tab 混用
NameError 名称错误 使用了没定义的变量
TypeError 类型错误 整数当列表用、字符串加数字
ValueError 值错误 转 int 时输了字母
IndexError 索引错误 列表下标越界
KeyError 键错误 字典查了不存在的 key
ZeroDivisionError 除零错误 除数是 0
FileNotFoundError 文件不存在 打开了不存在的文件

练习题(带答案)

练习题 1

下面代码会报什么错?为什么?

复制代码
print(10 + "5")

答案:

TypeError 类型错误 原因:整数和字符串不能直接相加。


练习题 2

补全代码,让程序不崩溃,并提示 "输入错误":

复制代码
try:
    num = int(input("输入数字:"))
except ???:
    print("输入错误")

答案:

复制代码
except ValueError:

练习题 3

写出try-except-else-finally完整结构,计算20/0并捕获错误。

答案:

复制代码
try:
    20 / 0
except ZeroDivisionError:
    print("不能除以0")
else:
    print("计算成功")
finally:
    print("运行结束")

练习题 4

写一个函数,接收两个数做除法,出错返回 None

答案:

复制代码
def divide(x, y):
    try:
        return x / y
    except:
        return None

print(divide(6, 2))  # 3
print(divide(5, 0))  # None

try /except 核心逻辑(你总结的完全对)
先跑 try 里面的代码
如果 try 里没报错 → 跳过 except,直接往下走
如果 try 里报错了 → 立刻停止 try,跑去执行 except

总结(小白必背 3 句话)

  1. 代码可能出错 → 用 try-except 包起来
  2. 找错最简单 → 用 print() 打印变量
  3. 保证代码正确 → 用 assert 做测试
相关推荐
AI视觉网奇1 小时前
Bambu Studio 发现 xx个开放边
开发语言·人工智能·python
三品吉他手会点灯1 小时前
C语言学习笔记 - 46.运算符和表达式 - 运算符4 - 对初学运算符的一些建议
c语言·开发语言·笔记·学习
SilentSamsara1 小时前
缓存策略实战:Redis + Python 多级缓存设计与失效策略
开发语言·redis·python·缓存·性能优化
wangqiaowq2 小时前
Rerank模型学习
学习
本地化文档2 小时前
psycopg3-docs-l10n
数据库·python·postgresql·github·gitcode·sphinx
呉師傅2 小时前
EPSON爱普生 L3118打印头【喷头】清洗方法
运维·服务器·网络·学习·电脑
JeJe同学2 小时前
LabelImg 标签字体大小修改教程
linux·人工智能·python
在学了加油2 小时前
Inception v3学习笔记
笔记·学习
Irissgwe2 小时前
【无标题】
python·langchain·ai编程·langgraph