Python训练营打卡 Day25
知识点回顾:
- 异常处理机制
- debug过程中的各类报错
- try-except机制
- try-except-else-finally机制
在即将进入深度学习专题学习前,我们最后差缺补漏,把一些常见且重要的知识点给他们补上,加深对代码和流程的理解。
作业:理解今日的内容即可,可以检查自己过去借助ai写的代码是否带有try-except机制,以后可以尝试采用这类写法增加代码健壮性。
——————————————————————————————————————————
一、异常处理机制
1、基本介绍
-
try子句:包含可能引发异常的代码。
-
except子句:用于捕获和处理
try
子句中产生的异常。当try块里的代码真的出错了,就跳到except块里执行这里的代码。
2、异常处理的作用
-
提高程序的健壮性和可靠性 :在程序运行过程中,可能会遇到各种意外情况,如文件不存在、网络连接中断、用户输入错误等。通过使用异常处理机制,可以捕获这些异常并进行相应的处理,使程序能够继续正常运行或以一种合理的方式退出,而不会因为异常而导致程序崩溃。
-
提高程序的可维护性和可读性 :将异常处理代码集中在一个地方,可以使程序的主逻辑更加清晰,易于理解和维护。同时,通过使用适当的异常类型和处理方式,可以使程序的结构更加合理,提高程序的可读性和可维护性。
二、debug过程中的各类报错
-
SyntaxError
:语法错误,代码不能正确解析,如拼写错误或缺少冒号、括号等。 -
NameError
:尝试访问一个未定义的变量或函数,如变量未赋值就使用。 -
TypeError
:操作或函数被应用于不适当类型的对象,如对字符串和整数进行数值运算。 -
IndexError
:序列索引超出范围,如访问列表中不存在的索引。 -
KeyError
:字典中不存在指定的键。 -
ValueError
:函数接收到具有正确类型但值不合适的参数,如将字符串转换为整数时输入的不是数字字符串。 -
ZeroDivisionError
:除数为零时触发。 -
AtrributeError:
属性错误,尝试访问一个对象没有的属性或方法。 -
FileNotFoundError:
文件未找到错误,尝试打开一个不存在的文件(通常是在读模式下),或者路径不正确 -
FileModuleNotFoundError:
导入错误,尝试导入一个不存在的模块。去安装库即可,如果是自定义的模块,配置好对应的路径
三、try-except机制
print("--- 使用 try-except 捕获 ZeroDivisionError ---")
numerator = 10
denominator = 0try:print("尝试进行除法运算...")result = numerator / denominator # 潜在的风险代码print(f"计算结果是: {result}") # 如果上面出错,这行不会执行
except ZeroDivisionError:print("发生了一个除以零的错误!")result = "未定义 (除以零)" # 可以给一个默认值或提示print(f"程序继续执行... 最终结果的记录为: {result}")
print("--- 使用 try-except 捕获 TypeError ---")
x = "Total items: "
y = 5 # 假设这是一个从某处获取的数字try:print("尝试连接字符串和数字...")message = x + y # 潜在的 TypeErrorprint(f"最终消息: {message}")
except TypeError:print("类型错误!不能直接将字符串和数字相加。")print("尝试将数字转换为字符串进行连接...")message = x + str(y) # 修正操作print(f"修正后的消息: {message}")print(f"程序继续... 生成的消息是: {message}")
四、try-except-else-finally机制
-
try: 包含可能引发异常的代码。
-
except: 处理在 try 块中发生的特定异常。
-
else: (可选)如果 try 块中没有发生任何异常,则执行此代码块。
-
finally: (可选)无论 try 块中是否发生异常,总会执行此代码块。
print("--- try-except-else 示例 ---")def safe_divide(a, b):print(f"\n尝试计算 {a} / {b}")try:result = a / bexcept ZeroDivisionError:print("错误:除数不能为零!")return None # 或者其他表示失败的值except TypeError:print("错误:输入必须是数字!")return Noneelse:# 只有当 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") # TypeError
@浙大疏锦行