首页 > 编程语言 >Python基础教学之五:异常处理与文件操作——让程序更健壮

Python基础教学之五:异常处理与文件操作——让程序更健壮

时间:2024-07-11 14:27:00浏览次数:13  
标签:文件 健壮 Python except try 处理 之五 异常

Python基础教学之五:异常处理与文件操作——让程序更健壮

一、异常处理概念

1. 理解异常

  • 异常是程序运行中发生的错误或意外情况,比如除以零、访问不存在的列表元素等。
  • 如果不进行处理,异常会导致程序终止运行。
  • 在编程过程中,我们经常会遇到意料之外的情况,这些情况如果不加以处理,可能会导致程序崩溃或者产生不可预料的结果。异常处理是一种防御性编程策略,使得程序在遇到错误时能够优雅地恢复或报告错误而非直接崩溃。
  • 了解不同种类的异常及其应用场景是通过Python编程进行有效错误处理的关键。

        下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

2. 异常类型

  • Python有多种内置异常类型,如IndexErrorTypeErrorValueError等,每种异常对应特定的错误情况。
  • 可以通过创建自定义类来定义新的异常类型。

3. 异常的层次结构

  • 所有的异常都是从基类Exception派生出来的。
  • 异常的层次结构可以帮助我们更好地组织和处理不同类型的异常。

二、异常处理机制

1. try-except语句

  • try块包含可能引发异常的代码。
  • except块捕获并处理特定类型的异常。
  • 当Python解释器执行try块中的代码时,如果没有任何异常发生,那么except块将被跳过,程序将继续执行try块之后的代码。但是,如果try块中的代码引发了异常,那么try块中剩余的部分将被跳过,程序将查找下一个适当的except块来处理这个异常。
  • except块可以针对特定的异常类型进行处理,也可以使用一个except块来捕获并处理所有类型的异常。在except块中可以使用一个变量来接收异常实例,这给了我们更多的信息来了解异常的具体原因。

2. 多个except子句

  • 可以在一个try块后使用多个except子句来处理不同类型的异常。
  • 每个except子句指定一种异常类型和一个处理动作。
  • 在复杂的程序中,可能会遇到多种不同的错误情况,每种情况可能需要不同的处理方式。通过使用多个except子句,我们可以为每种异常类型提供定制化的处理代码。
try:
    # 尝试执行一些操作
    num = int(input("Enter a number: "))
    result = 10 / num
    print(result)
    
except ValueError:
    # 处理ValueError异常,如非数字字符串转换为数字时引发的错误
    print("Please enter a valid number.")
    
except ZeroDivisionError:
    # 处理ZeroDivisionError异常,如除数为零时引发的错误
    print("Division by zero is not allowed.")
    
except Exception as e:
    # 通用异常处理,捕获除上述以外的所有异常
    print("An unexpected error occurred:", str(e))

3. finally子句

  • finally子句的代码无论是否发生异常都会执行,常用于释放资源,如关闭文件。
  • 在Python的异常处理机制中,finally子句是一个可选的部分,它出现在try/except块之后。
  • 不管前面的代码是否发生了异常,finally子句中的代码都将被执行。这使其成为执行重要清理工作的理想选择,例如关闭文件、网络连接等资源,无论其前的代码是否成功。

三、文件操作与异常处理

1. 文件打开与关闭

  • 使用open()函数打开文件,并通过close()方法关闭文件。
  • 忘记关闭文件可能导致数据丢失或损坏。
  • 在处理文件时,我们经常需要读取或写入数据。在Python中,我们使用open()函数来打开一个文件,并获取一个文件对象,然后可以使用这个对象进行读写操作。
  • 然而,文件操作可能会引发如FileNotFoundError(当文件不存在时)、IsADirectoryError(当尝试打开一个目录而不是文件时)等多种异常。
  • 确保文件在使用后正确关闭是很重要的,因为打开的文件会占用系统资源,而且在一些操作系统中,未关闭的文件可能会阻止其他程序访问该文件。

2. 异常处理在文件操作中的应用

  • 使用try-except-finally结构确保文件正确关闭,即使在读写过程中发生异常。
  • 可以捕获并处理IOError等与文件操作相关的异常。
try:
    # 打开文件
    file = open("example.txt", "r")
    
    # 读取文件内容
    content = file.read()
    print(content)
    
except IOError as e:
    # 捕获并处理IOError异常
    print("An I/O error occurred:", str(e))
    
finally:
    # 确保文件被关闭,无论是否发生异常
    if 'file' in locals():
        file.close()
        print("File closed successfully.")

        在这个例子中,我们首先尝试打开一个名为"example.txt"的文件,并读取其内容。如果在打开或读取文件的过程中发生了I/O错误(例如文件不存在或没有读取权限),则会触发IOError异常。在except块中,我们捕获了这个异常并打印了一个错误消息。

        无论是否发生异常,finally块中的代码都会被执行。在这里,我们检查变量file是否存在于局部作用域中,如果存在,则调用file.close()方法来关闭文件。这样可以确保即使发生异常,文件也会被正确关闭。

3.上下文管理器

  • 通过实现with语句和上下文管理器,可以自动管理资源,如文件的打开和关闭。
  • with语句简化了资源管理,使代码更加清晰和健壮。
  • 上下文管理器是Python的一个强大特性,它允许定义一个上下文,在这个上下文中可以包含一些始终需要在程序中执行的设置和清理代码。
  • 当进入with代码块时,上下文管理器会执行一些设置工作,而当离开这个代码块时,无论因为正常结束还是由于引发了异常,它都会执行清理工作。
  • 对于文件操作来说,使用上下文管理器意味着我们不需要再显式调用file.close()来关闭文件。即使文件操作中抛出了异常,上下文管理器也会保证文件得到正确的关闭。
  • 官网操作文档:contextvars --- 上下文变量 — Python 3.12.4 文档

四、总结

        在Python编程中,异常处理和文件操作是两个关键的概念,它们对于创建健壮和可靠的程序至关重要。将异常处理与文件操作相结合,不仅可以提升程序的稳健性,还能提高代码的可读性和可维护性。通过掌握这些技能,开发者可以更自信地处理文件数据,同时确保程序即使在面对错误时也能优雅地运行。学习并应用这些概念,无疑会让我们的Python编程之旅更加顺利和高效。

标签:文件,健壮,Python,except,try,处理,之五,异常
From: https://blog.csdn.net/jkoij23/article/details/140350661

相关文章

  • 给想学好Python编程的小伙伴的一些建议
    关于Python技术储备学好Python不论是就业还是做副业赚钱都不错,但要学会Python还是要有一个学习规划。最后大家分享一份全套的Python学习资料,给那些想学习Python的小伙伴们一点帮助!保存图片微信扫描下方博客园官方认证二维码免费领取【保证100%免费】 一、Python所......
  • 第五篇:python字符串
    一.字符串的定义在Python中,字符串是由一系列字符组成的序列,用于存储文本信息。字符串可以用单引号('')、双引号("")或三引号(''''''或"""""")来定义。三引号通常用于定义多行字符串。二.字符串的遍历遍历字符串意味着逐个访问字符串中的每个字符。这可以通过for循环实现。......
  • Python-NumPy 库编写复杂程序
    1、解释说明NumPy是一个用于Python编程语言的库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy是开源的,并且广泛地使用于各种科学计算和数据分析领域。NumPy的核心功能如下:-ndarray(N-dimensionalarrayobject):一个具有向量运算能力的快......
  • Python机器学习实战:推荐系统的原理与实现方法
    Python机器学习实战:推荐系统的原理与实现方法1.背景介绍1.1问题的由来在当今数字化时代,推荐系统已成为电子商务、媒体流媒体平台、社交媒体以及在线购物网站的核心组件之一。推荐系统旨在根据用户的历史行为、偏好以及社会关系等因素,为用户提供个性化的内容或商品建议,......
  • python的入门知识(下)
    目录学习内容数字字符串、列表和元组映射和集合类型学习内容数字长整型(LongInteger):在Python中,整数没有大小限制,但是可以用大写或小写的L来表示长整型,尽管这不是Python3推荐的做法。复数(ComplexNumbers):由实数部分和虚数部分组成,形如real+imagj。虚数部分......
  • 11、Python之变量:看得见还是看不见
    引言在前面一篇关于Python变量的文章中,更多地结合对象的内存结构及字节码指令,来看不同代码针对不同的类型的对象的不同效果。今天这篇文章中,想对新手在使用Python变量中,可能遇到的其他困惑,再展开来说一下。大概分为这几个模块:1、几种变量赋值操作2、Python中的变量作用......
  • python urllib 基础 5
    ajax的post请求importurllib.requestimporturllib.parse#url='https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'##headers={#'user-agent':"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTM......
  • Python毕业设计(四十八)、基于Python+Django+Vue的美食推荐系统
    如需要可私信或评论区留言!!!如需要可私信或评论区留言!!!如需要可私信或评论区留言!!!一、项目介绍        美食推荐系统分为前端用户端和后台管理系统。        用户端包括注册登录、查看系统推荐菜品列表、全部菜品列表、按分类筛选菜品、查看菜品统计分析、查......
  • Windows+Python配置和使用labelme打标工具(语义分割)
    Labelme是一个开源的图像标注工具麻省理工学院的计算机科学和人工智能实验室(CSAIL)开发。它主要用于创建计算机视觉和机器学习应用所需的标记数据集。LabelMe让用户可以在图片上标注对象和区域,为机器学习模型提供训练数据。它支持多种标注类型,如矩形框、多边形和线条等。它是用Py......
  • Python中的字符串:一次奇妙的冒险之旅
    大家好!今天,我们要踏上一段激动人心的旅程,一起探索Python中的字符串。你:一次奇妙的冒险之旅?字符串:哈哈,没错!对于操纵我的人来说,通常不是创建后就直接拿来用了。他们会对我进行各种魔法般的变换,让我变成他们需要的样子。经过一系列神奇的转换,我早已变得面目全非,真是一场又一场......