刚学 Python 的你,是不是经常遇到这些崩溃瞬间?写的函数自己测试完美运行,换个输入直接报错;处理文件时,文件不存在程序直接闪退;给同学用自己写的小工具,对方随便输点内容就崩掉……

其实这不是你能力不行,而是编程思维没跟上!今天咱们用最简单、最接地气的方式,讲清楚 Python 新手必懂的两个概念:攻击式编程防御式编程

不用复杂理论,看完就能用,帮你从「代码能跑就行」进阶到「代码稳定好用」!


一、攻击式编程:乐观主义者的写法

什么是攻击式编程?

攻击式编程也叫乐观编程,核心只有一句话:我默认所有条件都是完美的,代码直接冲!不做任何多余的预判!

就像出门不看天气预报,默认不会下雨,不带伞;新手写代码,几乎都是本能的攻击式编程 —— 因为它简单、直接、不用动脑

新手最常见的攻击式代码示例

咱们用两个入门级例子,一眼看懂:

示例 1:除法函数(攻击式)
# 攻击式除法:默认除数不为0,参数都是数字
def divide(a, b):
    return a / b

# 正常调用:完美运行
print(divide(10, 2))  # 输出 5.0

# 意外调用:程序直接崩溃!
print(divide(10, 0))  # 报错:ZeroDivisionError(除数为0)
print(divide(10, "abc")) # 报错:TypeError(类型错误)
示例 2:读取文件(攻击式)
# 攻击式读文件:默认文件一定存在
with open("my_note.txt", "r", encoding="utf-8") as f:
    content = f.read()

print(content)
# 如果文件删了/输错名字:直接报错FileNotFoundError,程序终止

攻击式编程的优缺点

优点

  1. 代码极简,编写速度飞快
  2. 逻辑直白,新手一眼就能看懂
  3. 适合自己快速测试、写临时小脚本

缺点毫无容错能力! 只要出现一点意外,程序直接崩溃,完全无法处理异常。


二、防御式编程:悲观主义者的写法

什么是防御式编程?

防御式编程也叫悲观编程,核心是:提前预判所有可能出错的地方,提前做好应对方案!不让程序轻易崩溃!

就像出门看天气预报、带伞、检查钥匙,把所有意外都堵在前面。防御式编程不是写 bug,而是提前消灭 bug,让程序即使出错,也能优雅提示,而不是直接闪退。

改造:防御式代码示例

我们把刚才的攻击式代码,改成稳定不崩溃的防御式版本:

示例 1:除法函数(防御式)
# 防御式除法:预判所有可能的错误
def divide(a, b):
    # 1. 预判:参数不是数字的情况
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        return "❌ 错误:请输入数字!"
    # 2. 预判:除数为0的情况
    if b == 0:
        return "❌ 错误:除数不能为0!"
    # 3. 所有风险排除,再执行核心逻辑
    return a / b

# 测试所有情况,程序全程不崩溃!
print(divide(10, 2))      # 5.0
print(divide(10, 0))      # ❌ 错误:除数不能为0!
print(divide(10, "abc"))  # ❌ 错误:请输入数字!
示例 2:读取文件(防御式)
# 防御式读文件:捕获所有文件操作异常
try:
    # 核心逻辑
    with open("my_note.txt", "r", encoding="utf-8") as f:
        content = f.read()
    print("✅ 文件读取成功:", content)

# 捕获:文件不存在的异常
except FileNotFoundError:
    print("❌ 错误:文件不存在,请检查文件名/路径!")
# 捕获:其他所有未知异常
except Exception as e:
    print(f"❌ 读取失败,原因:{e}")

防御式编程的优缺点

优点

  1. 程序极度稳定,永远不会无故崩溃
  2. 友好的错误提示,自己 / 别人都能快速定位问题
  3. 团队开发、正式项目的必备标准

缺点:代码多几行,需要多思考一步「这里哪里会出错?


三、新手必看:两者怎么选?

没有绝对的好坏,分场景使用才是高手思维:

✅ 用攻击式编程的场景

  1. 自己写临时小脚本、快速测试代码
  2. 学习练习、本地自用的简单工具
  3. 代码逻辑极简单,几乎没有任何意外风险

✅ 必须用防御式编程的场景

  1. 别人使用的代码、函数、小工具
  2. 正式项目、生产环境代码
  3. 处理外部数据(文件、用户输入、网络请求)—— 这是最容易出错的地方!

四、Python 新手必学的 5 个防御式技巧

不用学复杂框架,掌握这 5 个基础用法,你的代码直接升级:

1. try-except:捕获异常(最常用)

专门处理文件、运算、网络等可能报错的逻辑。

2. 参数校验:isinstance()

判断用户输入的参数类型是否正确,杜绝类型错误。

3. 函数默认值

给参数加默认值,避免缺失参数报错。

# 带默认值,不传age也不会报错
def introduce(name, age=18):
    print(f"我叫{name},今年{age}岁")

4. assert 断言

开发阶段快速检查错误,提前发现问题。

def check_age(age):
    # 断言:年龄必须是0-150,否则直接报错提示
    assert 0 <= age <= 150, "年龄不合法!"
    return age

5. 清晰的提示信息

用中文提示代替生硬的系统报错,方便调试。


五、总结

对于 Python 新手来说:

  1. 攻击式编程是本能:先学会它,让代码快速跑起来,完成基础功能;
  2. 防御式编程是能力:养成预判错误的习惯,让代码稳定、健壮、专业。

攻击式编程能让你快速写出代码,防御式编程能让你写出好代码

从今天开始,写代码前多问自己一句:这里可能会出错吗?坚持下去,你写的 bug 会减少 90%,轻松成为身边人眼中的编程小大佬~

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐