python打卡day25

发布于:2025-05-14 ⋅ 阅读:(14) ⋅ 点赞:(0)
python的异常处理机制

知识点回顾:

  1. 异常处理机制
  2. debug过程中的各类报错
  3. try-except机制
  4. try-except-else-finally机制

在即将进入深度学习专题学习前,我们最后差缺补漏,把一些常见且重要的知识点给他们补上,加深对代码和流程的理解。

作业:理解今日的内容即可,可以检查自己过去借助ai写的代码是否带有try-except机制,以后可以尝试采用这类写法增加代码健壮性。

异常处理的核心概念是:

  •  try: 包含可能会引发异常的代码块。程序会首先尝试执行这里的代码
  • except: 如果try块中的代码确实引发了特定类型的异常(或者任何异常,如果未指定类型),则执行此代码块
  • else: (可选)如果try块中的代码没有发生任何异常,则执行此代码块
  • finally: (可选)无论try块中是否发生异常,总会执行此代码块(常用于资源清理)

常见语句结构;

1、try-except

try:
    # 可能会引发异常的代码
except ExceptionType: # 最好指定具体的异常类型,例如 ZeroDivisionError, FileNotFoundError
    # 当 try 块中发生 ExceptionType 类型的异常时执行的代码

程序首先尝试执行 try 块中的代码,如果 try 块中的代码没有发生异常,则 except 块会被跳过,程序继续执行 try-except 结构之后的代码。如果 try 块中的代码发生了异常,Python会查找与该异常类型匹配的 except 块。如果找到匹配的,则执行该 except 块中的代码,然后继续执行整个 try-except 结构之后的代码(除非 except 块中又引发了新异常或执行了 return/break/continue 等)。如果未找到匹配的 except 块,异常会向上传播

类比: 你可以把它看作是:“尝试做这件事,如果出错了(并且是特定类型的错误),就执行补救措施。”

2、try-except-else

try:
    # 可能会引发异常的代码
except ExceptionType:
    # 当 try 块中发生 ExceptionType 类型的异常时执行的代码
else:
    # 当 try 块中【没有】发生任何异常时执行的代码

执行 try 块中的代码,如果 try 块中发生异常,则会查找并执行匹配的 except 块,else 块不会被执行。如果 try 块中没有发生任何异常,则会跳过所有 except 块,然后执行 else 块中的代码

print("--- try-except-else 示例 ---")

def safe_divide(a, b):
    print(f"\n尝试计算 {a} / {b}")
    try:
        result = a / b
    except ZeroDivisionError:
        print("错误:除数不能为零!")
        return None # 或者其他表示失败的值
    except TypeError:
        print("错误:输入必须是数字!")
        return None
    else:
        # 只有当 try 块中的 a / b 成功执行时,这里才会执行
        print("除法运算成功!")
        print(f"结果是: {result}")
        # 可以在这里进行基于成功结果的进一步操作
        print(f"结果的两倍是: {result * 2}")
        return result

# 测试用例
safe_divide(10, 2)  # 成功
safe_divide(10, 0)  # ZeroDivisionError
safe_divide("10", 2) # TypeError (如果我们不先做类型转换的话)
safe_divide(20, "abc") # TypeErro

3.try-except-else-finally

finally 子句中的代码无论 try 块中是否发生异常,也无论 except 块是否被执行,甚至无论 try 或 except 块中是否有 return 语句,它总会被执行。这个特性,在机器学习和深度学习的中,多涉及资源的保存、文件的关闭等

一般的异常报错如下:

SyntaxError (语法错误)        原因: 代码不符合 Python 的语法规则(比如少个逗号冒号,表达式非法啥的),解释器在尝试解析代码时就会失败。这种错误在程序运行之前就会被检测到

NameError (名称错误)        原因: 尝试使用一个未被定义的变量、函数或对象的名称(手滑打错了变量名也是)

TypeError (类型错误)        原因: 对一个不支持该操作的数据类型执行了某个操作或函数

ValueError (值错误)        原因: 函数接收到的参数类型正确,但其值不合适或无效

IndexError (索引错误)        原因: 尝试访问序列(如列表、元组、字符串)中一个不存在的索引

KeyError (键错误)        原因: 尝试访问字典中一个不存在的键

AttributeError (属性错误)        原因: 尝试访问一个对象没有的属性或方法(比如说本该是方法的函数,被当成属性用了)

ZeroDivisionError (除零错误)        原因: 尝试将一个数字除以零

FileNotFoundError (文件未找到错误)        原因: 尝试打开一个不存在的文件(通常是在读模式下),或者路径不正确

ModuleNotFoundError (导入错误)        原因:尝试导入一个不存在的模块,或者模块存在但其中的特定名称找不到, Python 的模块加载器找不到这个模块。去安装库即可,如果是自定义的模块,配置好对应的路径

眼熟一下吧,免得报错了只会丢给大模型解答

@浙大疏锦行