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/5/1 2:28:24

Qwen3-0.6B客服工单分类实战:准确率达90%部署方案

Qwen3-0.6B客服工单分类实战&#xff1a;准确率达90%部署方案 1. 为什么选Qwen3-0.6B做客服工单分类 客服系统每天要处理成百上千条用户反馈&#xff0c;从“订单没收到”到“发票开错了”&#xff0c;问题五花八门。人工分类耗时、易出错&#xff0c;规则引擎又太死板——改…

作者头像 李华
网站建设 2026/5/1 8:59:57

医疗问诊录音分析:用SenseVoiceSmall识别患者情绪变化

医疗问诊录音分析&#xff1a;用SenseVoiceSmall识别患者情绪变化 1. 为什么医生需要“听懂”患者的情绪&#xff1f; 你有没有想过&#xff0c;一次普通的门诊问诊里&#xff0c;真正决定诊疗质量的&#xff0c;可能不是那句“哪里不舒服”&#xff0c;而是说话时微微发颤的…

作者头像 李华
网站建设 2026/5/1 8:57:27

OpenCord:重新定义移动端聊天体验的开源客户端

OpenCord&#xff1a;重新定义移动端聊天体验的开源客户端 【免费下载链接】OpenCord An open-source Material You implementation of the Discord Android app 项目地址: https://gitcode.com/gh_mirrors/op/OpenCord &#x1f525; 为什么选择OpenCord&#xff1f;—…

作者头像 李华
网站建设 2026/5/1 6:52:38

解锁掌机离线娱乐新方式:wiliwili无网络观影全攻略

解锁掌机离线娱乐新方式&#xff1a;wiliwili无网络观影全攻略 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili …

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

突破生态壁垒:让旧音箱焕发新生的音频桥接方案

突破生态壁垒&#xff1a;让旧音箱焕发新生的音频桥接方案 【免费下载链接】AirConnect Use AirPlay to stream to UPnP/Sonos & Chromecast devices 项目地址: https://gitcode.com/gh_mirrors/ai/AirConnect 如何让普通音箱支持多平台音频传输&#xff1f;传统音箱…

作者头像 李华
网站建设 2026/5/1 7:56:55

Lodash性能优化避坑指南:5个鲜为人知的使用误区

Lodash性能优化避坑指南&#xff1a;5个鲜为人知的使用误区 【免费下载链接】lo samber/lo: Lo 是一个轻量级的 JavaScript 库&#xff0c;提供了一种简化创建和操作列表&#xff08;数组&#xff09;的方法&#xff0c;包括链式调用、函数式编程风格的操作等。 项目地址: ht…

作者头像 李华