首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >十五天Python系统学习教程第四天

十五天Python系统学习教程第四天

作者头像
紫风
发布2025-10-14 18:02:02
发布2025-10-14 18:02:02
1120
举报
📅 Day 4 详细学习计划:异常处理与文件操作

学习目标 ✅ 掌握Python异常处理机制(对比Java的try-catch) ✅ 熟练使用Python文件操作API(对比Java的File类) ✅ 实现CSV文件读写与异常处理 ✅ 理解上下文管理器(with)原理


一、异常处理机制深度对比(1小时)
1.1 基础语法差异

特性

Java

Python

基础结构

try-catch-finally

try-except-else-finally

异常类型

需明确捕获特定异常

可捕获基类Exception

异常对象

catch (IOException e)

except IOError as e

自定义异常

继承Exception类

继承Exception类

代码对比示例

代码语言:javascript
复制
// Java异常处理  
try {  
    FileReader file = new FileReader("data.txt");  
} catch (FileNotFoundException e) {  
    System.out.println("文件未找到: " + e.getMessage());  
} finally {  
    file.close();  
}  
代码语言:javascript
复制
# Python异常处理  
try:  
    file = open("data.txt")  
except FileNotFoundError as e:  
    print(f"文件未找到: {e.strerror}")  
else:  
    print("文件打开成功")  
finally:  
    file.close()  

1.2 Python特有机制

1.2.1 异常层次结构

代码语言:javascript
复制
BaseException  
 ├── KeyboardInterrupt  
 ├── SystemExit  
 └── Exception  
      ├── IOError  
      ├── ValueError  
      └── ...  

1.2.2 多异常捕获

代码语言:javascript
复制
try:  
    num = int(input("输入数字: "))  
except (ValueError, TypeError) as e:  
    print(f"输入错误: {e}")  

1.2.3 异常链(Python 3.11+)

代码语言:javascript
复制
try:  
    connect_db()  
except ConnectionError as e:  
    raise ServerError("服务不可用") from e  

二、文件操作详解(1小时)
2.1 基础文件读写

模式

描述

Java近似类

r

只读(默认)

FileReader

w

写入(覆盖)

FileWriter

a

追加写入

FileWriter(append=True)

b

二进制模式

BufferedInputStream

代码示例

代码语言:javascript
复制
# 读取整个文件(对比Java Files.readAllBytes)  
with open("data.txt", "r", encoding="utf-8") as f:  
    content = f.read()  

# 逐行读取(内存友好)  
with open("large_file.txt") as f:  
    for line in f:  
        process(line)  

# 写入文件  
with open("output.txt", "w") as f:  
    f.write("Hello\nWorld")  

2.2 CSV文件处理
代码语言:javascript
复制
import csv  

# 读取CSV(对比Java OpenCSV)  
with open("sales.csv", "r") as f:  
    reader = csv.DictReader(f)  
    for row in reader:  
        print(row["product"], row["price"])  

# 写入CSV  
headers = ["name", "age"]  
data = [["Alice", 30], ["Bob", 25]]  
with open("output.csv", "w", newline="") as f:  
    writer = csv.writer(f)  
    writer.writerow(headers)  
    writer.writerows(data)  

三、上下文管理器原理(30分钟)
3.1 实现自定义上下文管理器
代码语言:javascript
复制
class DatabaseConnection:  
    def __enter__(self):  
        self.conn = connect_db()  
        return self.conn  

    def __exit__(self, exc_type, exc_val, exc_tb):  
        self.conn.close()  
        if exc_type:  
            print(f"错误发生: {exc_val}")  

# 使用方式  
with DatabaseConnection() as conn:  
    conn.execute_query("SELECT ...")  
3.2 对比Java的try-with-resources
代码语言:javascript
复制
// Java自动资源管理  
try (Connection conn = DriverManager.getConnection(url)) {  
    Statement stmt = conn.createStatement();  
}  // 自动调用close()  

四、实践项目:销售数据处理系统(1.5小时)
4.1 需求描述
  • sales.csv读取数据(字段:product, price, quantity
  • 计算总销售额(price * quantity之和)
  • 处理可能的异常:
    • 文件不存在
    • 数据格式错误(如价格不是数字)
    • 空文件
  • 结果写入report.txt

4.2 分步实现

步骤1:CSV读取与异常处理

代码语言:javascript
复制
import csv  

def read_sales_data(file_path):  
    try:  
        with open(file_path, "r") as f:  
            reader = csv.DictReader(f)  
            if not reader.fieldnames:  
                raise ValueError("空文件或缺少表头")  
            return list(reader)  
    except FileNotFoundError:  
        print("销售文件不存在")  
        return []  

步骤2:数据验证与计算

代码语言:javascript
复制
def calculate_total(sales):  
    total = 0.0  
    for row in sales:  
        try:  
            price = float(row["price"])  
            qty = int(row["quantity"])  
            total += price * qty  
        except (KeyError, ValueError) as e:  
            print(f"数据格式错误: {e}")  
    return total  

步骤3:结果写入与异常处理

代码语言:javascript
复制
def save_report(total):  
    try:  
        with open("report.txt", "w") as f:  
            f.write(f"总销售额: {total:.2f}")  
    except IOError as e:  
        print(f"报告生成失败: {e.strerror}")  

4.3 完整代码
代码语言:javascript
复制
import csv  

def main():  
    sales_data = read_sales_data("sales.csv")  
    if not sales_data:  
        return  

    total = calculate_total(sales_data)  
    save_report(total)  
    print("报告生成成功")  

if __name__ == "__main__":  
    main()  

五、Java开发者常见陷阱
  1. 文件路径问题
    • Python相对路径基于当前工作目录(可通过os.chdir()修改)
    • 建议使用绝对路径:os.path.abspath(__file__)
  2. 编码问题
    • 默认使用系统编码(可通过encoding="utf-8"指定)
    • 处理中文文件时需明确指定编码
  3. 资源泄漏风险
    • 优先使用with语句而非手动close()
    • 对网络/数据库连接等资源同样适用

六、扩展练习

增强数据验证

  • 添加商品名称非空检查
  • 跳过数量为负的记录

处理大文件

  • 使用生成器逐行处理(避免内存溢出)
代码语言:javascript
复制
def iter_sales(file_path):  
    with open(file_path) as f:  
        reader = csv.DictReader(f)  
        for row in reader:  
            yield row  

自定义异常类

代码语言:javascript
复制
class SalesDataError(Exception):  
    def __init__(self, message, row_num):  
        super().__init__(message)  
        self.row_num = row_num  

raise SalesDataError("价格格式错误", 5)  

通过第四天的学习,您将掌握Python异常处理与文件操作的核心技能,并理解与Java的关键差异。重点总结: 1️⃣ with语句是资源管理的最佳实践 2️⃣ Python的异常处理更简洁灵活 3️⃣ CSV模块极大简化了表格数据处理

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📅 Day 4 详细学习计划:异常处理与文件操作
  • 一、异常处理机制深度对比(1小时)
    • 1.1 基础语法差异
    • 1.2 Python特有机制
  • 二、文件操作详解(1小时)
    • 2.1 基础文件读写
    • 2.2 CSV文件处理
  • 三、上下文管理器原理(30分钟)
    • 3.1 实现自定义上下文管理器
    • 3.2 对比Java的try-with-resources
  • 四、实践项目:销售数据处理系统(1.5小时)
    • 4.1 需求描述
    • 4.2 分步实现
    • 4.3 完整代码
  • 五、Java开发者常见陷阱
  • 六、扩展练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档