5.14y打卡

@浙大疏锦行
DAY 25 异常处理

知识点回顾:

1.  异常处理机制

2.  debug过程中的各类报错

3.  try-except机制

4.  try-except-else-finally机制

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

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

### SyntaxError (语法错误)
# 示例 a: 缺少冒号
# def my_function()
#     print("Hello")
# 示例 b: 非法表达式
# x = 5 +
# print(x)
# 为了让脚本能继续运行其他示例,我会注释掉这些会直接导致脚本无法解析的错误
# 请在演示时逐个取消注释并运行,观察错误

### NameError (名称错误)
# 示例 a: 变量未定义
# print(some_undefined_variable)
# 示例 b: 打错变量名
# print(my_lisst) # 变量名拼写错误

### TypeError (类型错误)
# print("Age: " + 25) # 字符串和整数
# my_number = 10
# my_number() # 尝试像函数一样调用一个整数

### ValueError (值错误)
# my_string = "12.34.56"
# number = float(my_string) # '12.34.56' 不是一个有效的浮点数表示

### IndexError (索引错误)
# data = ("apple", "banana")
# print(data[2])

### KeyError (键错误)
# student_grades = {"math": 90, "science": 85}
# print(student_grades["history"])

### AttributeError (属性错误)
# 示例a
# a_string = "hello"
# print(a_string.length) # 字符串长度用 len(a_string),不是 .length 属性
# 示例b
# import numpy as np
# arr = np.array([1,2,3])
# print(arr.non_existent_attribute)

### ZeroDivisionError (除零错误)
# result = 10 / 0
# result

### FileNotFoundError (文件未找到错误)
# import pandas as pd
# data = pd.read_csv("hh.csv")

###  ModuleNotFoundError (导入错误)
# import hhh
# print("--- 之前会崩溃的代码 (ZeroDivisionError) ---")
numerator = 10
denominator = 0
result = numerator / denominator # 这行会引发 ZeroDivisionError
print(f"结果是: {result}")
print("这行代码不会执行,因为程序已崩溃")
print("--- 使用 try-except 捕获 ZeroDivisionError ---")
numerator = 10
denominator = 0
try:
    print("尝试进行除法运算...")
    result = numerator / denominator # 潜在的风险代码
    print(f"计算结果是: {result}") # 如果上面出错,这行不会执行
except ZeroDivisionError:
    print("发生了一个除以零的错误!")
    result = "未定义 (除以零)" # 可以给一个默认值或提示
print(f"程序继续执行... 最终结果的记录为: {result}")
# print("--- 之前会崩溃的代码 (TypeError) ---")
x = "hello"
y = 5
result = x + y # 字符串不能和整数直接相加
print(result)
print("--- 使用 try-except 捕获 TypeError ---")
x = "Total items: "
y = 5 # 假设这是一个从某处获取的数字
try:
    print("尝试连接字符串和数字...")
    message = x + y # 潜在的 TypeError
    print(f"最终消息: {message}")
except TypeError:
    print("类型错误!不能直接将字符串和数字相加。")
    print("尝试将数字转换为字符串进行连接...")
    message = x + str(y) # 修正操作
    print(f"修正后的消息: {message}")
print(f"程序继续... 生成的消息是: {message}")
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") # TypeError
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值