news 2026/5/15 23:52:14

Python异常处理、文件操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python异常处理、文件操作

异常处理

概述

异常是程序运行时发生的错误。

>>> print(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>>

在程序发生异常时必须要进行处理,原因如下:

  1. 防止程序崩溃
  2. 提供错误信息并修正bug
  3. 允许程序有序结束或恢复

异常类型

  • 内置异常,如IndexError, KeyError, ValueError, TypeError等。
  • 自定义异常。

基本的异常处理语法

使用try与except代码块进行异常捕捉。

try: # 可能引发异常的代码 except <ExceptionType>: # 异常时的处理代码 def exp_exception(x, y): try: a = x / y print(f'a = {a}') return a except Exception: print('程序出现异常,异常信息:除数为0') exp_exception(2, 0)

执行结果:

程序出现异常,异常信息:除数为0

捕获多个异常

  • 为不同的异常使用多个except。

  • 使用元组一次捕获多个异常类型。

    try:
    pass
    except (TypeError, ValueError):
    pass
    except Exception as e:
    pass

    def multi_exception(x, y):
    try:
    a = x / y
    # b = name
    except ZeroDivisionError:
    print(‘this is ZeroDivisionError’)
    except NameError:
    print(‘this is NameError’)

    multi_exception(2, 0)

使用else和finally子句

  • else:如果没有异常发生,则执行。

  • finally:无论有无异常都会执行,常用于资源清理。

    try:
    # 尝试执行的代码
    except :
    # 异常时的处理
    else:
    # 无异常时执行
    finally:
    # 总会执行的代码

    def model_exception(x, y):
    try:
    a = x / y
    except:
    print(‘程序异常…’)
    else:
    print(‘程序无异常…’)
    finally:
    print(‘finally代码块被执行…’)

    model_exception(2, 1)

抛出异常

使用raise语句主动抛出异常

raise ValueError("A value error occurred.") >>> raise Exception Traceback (most recent call last): File "<stdin>", line 1, in <module> Exception >>> raise NameError('This is NameError') Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: This is NameError >>>

断言

使用断言处理预期外的条件

def get_age(age): assert age > 0, "年龄不能为负" return age try: user_age = get_age(-1) except AssertionError as error: print(error)

自定义异常

尽管内建异常类包括大部分异常,而且可以满足很多要求,但有时还是要创建自己的异常类。比如需要精确知道问题的根源,就需要使用自定义异常精确定位问题。可以通过创建一个新exception类拥有自己的异常。异常应该继承自Exception类,可以直接继承,也可以间接继承。

class MyError(Exception): def __init__(self): pass def __str__(self): return 'this is self define error' def my_error_test(): try: raise MyError() except MyError as e: print('exception info: ', e) my_error_test()

异常案例

在文件读写中使用异常

try: with open('example.txt', 'r') as file: content = file.read() except FileNotFoundError: print("文件未找到") except IOError: print("文件读取过程中出错")

文件操作

文件概述

  • 文件用于长期存储数据。
  • 通常存储在磁盘或其他永久性存储设备上。

文件操作的重要性

  • 数据存储和检索。
  • 配置文件的读取。
  • 日志文件的写入。
  • 数据交换。

文件模式

  • ‘r’:读取模式。
  • ‘w’:写入模式,先清空文件。
  • ‘a’:追加模式,写入时从文件末尾添加。
  • ‘b’:用于读或写二进制文件。
  • ‘+’:读写模式。

文件读取

使用open()函数来打开一个文件进行读取或写入。

file = open('example.txt', 'r') result = file.read() # 读取文件内容 file.close() # 关闭文件对象

除了read()方法可以读取文本数据外,Python也提供了其他方法来读取文件内容:

  • read(size):读取文件中所有内容或指定长度的字符。
  • readline():一次读取一行。
  • readlines():读取文件中所有行,作为列表返回。

使用with语法

推荐使用with语句自动处理文件的打开和关闭。

with open('example.txt', 'r') as file: content = file.read()

文件写入

使用write()方法写入字符串。

with open('example.txt', 'w') as file: file.write('Hello, World!')

多行写入:使用writelines()方法写入字符串列表。

lines = ['Hello, World!', 'Hello, Python!'] with open('example.txt', 'w') as file: file.writelines(line + '\n' for line in lines)

注意事项

  • 使用’w’模式打开文件会清空原有内容。
  • 使用’a’模式进行追加,不会清空原有内容。

文件操作的异常处理

try: with open('example.txt', 'r') as file: content = file.read() except FileNotFoundError as e: print("文件未找到", e)

文件指针操作

  • file.seek(offset, whence):移动文件读取指针到指定位置。

  • file.tell():返回文件指针的当前位置。

    打开文件以更新模式('r+'允许读写)

    filename = ‘example.txt’

    with open(filename, ‘r+’) as file:
    # 写入内容
    file.write(‘Hello, Python!\n’)
    file.write(‘Python is fun.\n’)

    # 通过seek方法把文件指针移动到文件的开头 file.seek(0) # 读取并打印文件内容 content = file.read() print(content)

处理二进制文件

以二进制模式rb或wb打开文件。

with open('example.bin', 'wb') as file: file.write(b'\x00\x01\x02')

with语句的探究 - 上下文管理器

在文件读写中,我们使用with语句管理文件对象的打开与关闭,那么with语句的具体代码实现是怎样的呢?其实Python调用了两个魔术方法:__enter__方法与__exit__方法。

class CustomFileManager: def __init__(self, filename, mode): self.filename = filename self.mode = mode self.file = None def __enter__(self): print('创建文件对象...') self.file = open(self.filename, self.mode) return self.file def __exit__(self, exc_type, exc_val, exc_tb): if self.file: self.file.close() print('关闭文件对象...') return False # 如果发生了异常,让Python正常地抛出它 # 使用自定义上下文管理器类 with CustomFileManager('example.txt', 'w') as f: f.write('Hello, Python!\n') # 当with语句块执行完成时,文件会被自动关闭。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 6:32:03

3步高效检索开放数据集:精选资源库使用指南

3步高效检索开放数据集&#xff1a;精选资源库使用指南 【免费下载链接】awesome-public-datasets A topic-centric list of HQ open datasets. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-public-datasets 为什么这个数据集库值得收藏&#xff1f; 你…

作者头像 李华
网站建设 2026/5/8 22:30:08

Llama3与SenseVoiceSmall融合应用:语音+文本多模态部署案例

Llama3与SenseVoiceSmall融合应用&#xff1a;语音文本多模态部署案例 1. 为什么需要语音文本的“双脑协同”&#xff1f; 你有没有遇到过这样的场景&#xff1a;客服录音里客户语气明显不耐烦&#xff0c;但转写文字只显示“我要投诉”&#xff0c;情绪线索全丢了&#xff1…

作者头像 李华
网站建设 2026/5/11 16:57:58

解析I2C HID设备启动失败:代码10的协议层原因全面讲解

以下是对您提供的技术博文进行 深度润色与结构重构后的专业级技术文章 。全文已彻底去除AI生成痕迹,语言风格贴近一线嵌入式系统工程师的实战分享口吻——逻辑清晰、节奏紧凑、重点突出,兼具教学性与工程指导价值。文中所有技术细节均严格基于原文内容拓展深化,未添加任何…

作者头像 李华
网站建设 2026/5/10 15:31:06

如何让wiliwili流畅播放4K视频?软件性能优化全攻略

如何让wiliwili流畅播放4K视频&#xff1f;软件性能优化全攻略 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili …

作者头像 李华
网站建设 2026/4/18 5:40:47

视频质量优化实战指南:效率提升与参数调校全攻略

视频质量优化实战指南&#xff1a;效率提升与参数调校全攻略 【免费下载链接】DeepFaceLive Real-time face swap for PC streaming or video calls 项目地址: https://gitcode.com/GitHub_Trending/de/DeepFaceLive &#x1f310; 问题诊断&#xff1a;3步定位法解析视…

作者头像 李华
网站建设 2026/5/9 10:02:56

跨平台文本编辑效率革命:Notepad--国产开源编辑器的颠覆体验

跨平台文本编辑效率革命&#xff1a;Notepad--国产开源编辑器的颠覆体验 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …

作者头像 李华