我之前当程序员那会儿,最怕的就是线上出bug。特别是那种偶发性bug,你本地怎么测都OK,一上线就崩,那种感觉真的太酸爽了...当然经历的多了也就明白了,很多时候我们并不能阻止“错误”,更多的是预防“崩溃”,这其中最关键的就在于——错误处理。接下来我们就来聊聊Python里的错误处理,保证你听完就能用!age = input("请输入你的年龄:")
print(f"明年你就{age + 1}岁了")
返回的是字符串,字符串不能直接和整数相加!所以运行时会报错:`TypeError: can only concatenate str (not "int") to str`这种运行时出现的"错误",在Python里叫做异常(Exception)。try:
# 可能出错的代码写在这里
result = 10 / 0
except ZeroDivisionError:
# 如果出了这个错,就执行这里的代码
print("除数不能为零!")
try:
num = int(input("请输入一个数字:"))
result = 10 / num
except ValueError:
print("输入的不是有效数字!")
except ZeroDivisionError:
print("除数不能为零!")
try:
1 / 0
except Exception as e:
print(f"错误类型:{type(e).__name__}")
print(f"错误信息:{e}")
错误类型:ZeroDivisionError
错误信息:division by zero
try:
result = 10 / 2
except ZeroDivisionError:
print("除数不能为零")
else:
# 只有在没有异常时才会执行
print(f"计算成功,结果是 {result}")
finally:
# 无论有没有异常,都会执行
print("程序结束")
有时候我们不只是"捕获"错误,还要主动"抛出"错误。def withdraw(balance, amount):
if amount > balance:
raise ValueError("余额不足!")
return balance - amount
try:
new_balance = withdraw(100, 200)
except ValueError as e:
print(e) # 输出:余额不足!
这样可以让代码逻辑更清晰,把"检查"和"处理"分开。class AgeError(ValueError):
"""年龄相关的异常"""
pass
def set_age(age):
if age < 0 or age > 150:
raise AgeError(f"无效的年龄:{age}")
print(f"年龄设置为:{age}")
try:
set_age(200)
except AgeError as e:
print(f"设置失败:{e}")
# 1. 尽量具体捕获异常
try:
with open("data.txt", "r") as f:
content = f.read()
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("没有读取权限")
# 2. 使用with语句自动关闭资源
with open("test.txt", "w") as f:
f.write("hello")
# 3. 记录日志而不是只打印
import logging
try:
# 操作
except Exception as e:
logging.error(f"发生错误:{e}")
# 1. 不要用空的except块
try:
risky_code()
except:
pass # 你都不知道出了什么错!
# 2. 不要过于宽泛地捕获
try:
code()
except Exception: # 捕获所有异常,太宽泛了
pass
def safe_divide(a, b):
# 在这里实现错误处理
pass
# 测试
print(safe_divide(10, 2)) # 应该输出 5
print(safe_divide(10, 0)) # 应该输出 "除数不能为零"
print(safe_divide("a", 2)) # 应该输出 "请输入有效数字"
| |
|---|
try...except | |
else | |
finally | |
raise | |
| |
记住:错误处理不是为了"掩盖"问题,而是让程序在出错时能够安全、可控地应对。掌握了今天的内容,下次遇到代码崩溃,你就知道该怎么优雅地处理了!如果觉得有用,欢迎转发给你身边正在学编程的朋友,大家一起进步!你们平时写代码最常遇到什么类型的错误呢?欢迎在评论区留言,咱们一起讨论!如果你恰好需要一些AI入门干货,可以来个“一键三连”(
转发,必须动作)后评论区留言“AI入门工具清单”,并且后台私信“AI入门工具清单”获取。