news 2026/5/1 10:27:20

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/4/23 3:56:48

Python进程、通信、进程池、生产者与消费者

进程 进程概述 程序&#xff1a;例如xxx.py这就是程序&#xff0c;是一个静态的。进程&#xff1a;一个程序运行起来后&#xff0c;代码 用到的资源称之为进程&#xff0c;它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务&#xff0c;进程也是可以的。 进程状态…

作者头像 李华
网站建设 2026/4/27 14:33:30

解锁AI提示工程:数据特征生成的创新方法论

解锁AI提示工程&#xff1a;数据特征生成的创新方法论 【免费下载链接】prompt-eng-interactive-tutorial Anthropics Interactive Prompt Engineering Tutorial 项目地址: https://gitcode.com/GitHub_Trending/pr/prompt-eng-interactive-tutorial 在金融风控场景中&a…

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

Open-AutoGLM值得部署吗?中小企业降本增效实操验证

Open-AutoGLM值得部署吗&#xff1f;中小企业降本增效实操验证 你有没有想过&#xff0c;让AI替你点开App、搜索关键词、滑动页面、甚至输入验证码&#xff1f;不是靠写脚本&#xff0c;也不是靠录屏回放&#xff0c;而是用一句大白话&#xff1a;“帮我把小红书里最近爆火的咖…

作者头像 李华
网站建设 2026/4/28 13:14:46

unet image Face Fusion环境部署:Docker镜像免配置快速上手

unet image Face Fusion环境部署&#xff1a;Docker镜像免配置快速上手 你是不是也试过下载一堆依赖、编译模型、改配置文件&#xff0c;折腾半天人脸融合还是跑不起来&#xff1f;别再被环境问题卡住了。今天这篇&#xff0c;就是专为“不想折腾”的人写的——一行命令启动&a…

作者头像 李华
网站建设 2026/4/25 4:25:16

工业级RS232引脚定义说明:全面讲解信号电平与用途

以下是对您提供的博文内容进行 深度润色与专业重构后的版本 。我以一位深耕工业通信十余年、常年泡在PLC机柜与EMC实验室的嵌入式老兵视角,将原文从“技术文档式说明”升级为 有温度、有战壕经验、有设计直觉的技术分享 ——既保留全部硬核知识点,又彻底去除AI腔调与教科…

作者头像 李华
网站建设 2026/5/1 10:40:12

如何突破时间管理瓶颈?Catime效率工具的科学时间分配法

如何突破时间管理瓶颈&#xff1f;Catime效率工具的科学时间分配法 【免费下载链接】Catime A very useful timer (Pomodoro Clock).[一款非常好用的计时器(番茄时钟)] 项目地址: https://gitcode.com/gh_mirrors/ca/Catime 核心痛点分析&#xff1a;现代工作场景中的时…

作者头像 李华