
学习目标
✅ 掌握Python异常处理机制(对比Java的try-catch)
✅ 熟练使用Python文件操作API(对比Java的File类)
✅ 实现CSV文件读写与异常处理
✅ 理解上下文管理器(with)原理
特性 | Java | Python |
|---|---|---|
基础结构 | try-catch-finally | try-except-else-finally |
异常类型 | 需明确捕获特定异常 | 可捕获基类Exception |
异常对象 | catch (IOException e) | except IOError as e |
自定义异常 | 继承Exception类 | 继承Exception类 |
代码对比示例:
// Java异常处理
try {
FileReader file = new FileReader("data.txt");
} catch (FileNotFoundException e) {
System.out.println("文件未找到: " + e.getMessage());
} finally {
file.close();
} # Python异常处理
try:
file = open("data.txt")
except FileNotFoundError as e:
print(f"文件未找到: {e.strerror}")
else:
print("文件打开成功")
finally:
file.close() 1.2.1 异常层次结构
BaseException
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── IOError
├── ValueError
└── ... 1.2.2 多异常捕获
try:
num = int(input("输入数字: "))
except (ValueError, TypeError) as e:
print(f"输入错误: {e}") 1.2.3 异常链(Python 3.11+)
try:
connect_db()
except ConnectionError as e:
raise ServerError("服务不可用") from e 模式 | 描述 | Java近似类 |
|---|---|---|
r | 只读(默认) | FileReader |
w | 写入(覆盖) | FileWriter |
a | 追加写入 | FileWriter(append=True) |
b | 二进制模式 | BufferedInputStream |
代码示例:
# 读取整个文件(对比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") 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) 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 ...") try-with-resources// Java自动资源管理
try (Connection conn = DriverManager.getConnection(url)) {
Statement stmt = conn.createStatement();
} // 自动调用close() sales.csv读取数据(字段:product, price, quantity)
price * quantity之和)
report.txt
步骤1:CSV读取与异常处理
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:数据验证与计算
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:结果写入与异常处理
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}") 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() os.chdir()修改)
os.path.abspath(__file__)
encoding="utf-8"指定)
with语句而非手动close()
增强数据验证
处理大文件
def iter_sales(file_path):
with open(file_path) as f:
reader = csv.DictReader(f)
for row in reader:
yield row 自定义异常类
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模块极大简化了表格数据处理
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。