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

news2024/9/9 3:54:28

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编程之旅更加顺利和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java语言程序设计——篇三(2)

循环结构 概述1️⃣while循环例题讲解 2️⃣do-while循环例题讲解 🚩while循环与do-while循环区别3️⃣for循环例题讲解 4️⃣循环的嵌套🏮例题讲解 概述 ⭐️Java语言提供了4种循环结构: (1) while循环 (2) do-while循环 (3) for循环 (4)增…

wangEdtior富文本编辑器 结合element使用,博客必备,通俗易懂

效果展示 使用步骤 安装 npm install wangeditor/editor-for-vue --save创建自定义组件 引入组件并注册&#xff0c;使用组件 <template><div style"border: 1px solid #ccc;"><Toolbarstyle"border-bottom: 1px solid #ccc":editor"…

如何使用Vger对已经过身份验证的Jupyter实例进行安全检测

关于Vger Vger是一款功能强大的交互式命令行应用程序&#xff0c;广大研究人员可以利用Vger与已经过身验证的Jupyter实例进行交互&#xff0c;并对其执行人工智能或机器学习方面的安全检测操作。 使用场景 1、作为红队研究人员&#xff0c;当我们寻找到了Jupyter凭证之后&…

经验分享|如何维护自己的大数据信用?

在当今数字化时代&#xff0c;大数据信用成为越来越多人生活中不可或缺的一部分。大数据信用评估是基于个人的信用历史、信用行为、信用记录等信息&#xff0c;对个人信用状况进行综合评估的一种方式。良好的大数据信用可以帮助个人获得更多的金融服务、更高的信用额度、更低的…

一招解决 Windows 文件重命名时后缀名不显示的困扰

在日常使用电脑的过程中&#xff0c;我们经常需要对文件进行重命名。然而&#xff0c;有时你会发现&#xff0c;在 Windows 系统中重命名文件时&#xff0c;默认情况下不会显示文件的扩展名&#xff08;即后缀名&#xff09;&#xff0c;这可能会导致意外地更改文件类型或者混淆…

Flutter开发者必读:sp_util - SharedPreferences的终极解决方案

简介 sp_util 是一个在 Flutter 社区中广泛使用的轻量级、无依赖的 SharedPreferences 封装库。 SharedPreferences 是 Android 和 iOS 平台上用于存储少量数据的简单键值存储系统。 典型场景 sp_util 库在 Flutter 应用开发中的典型使用场景包括但不限于以下几点&#xff…

模块化沙箱:多场景零信任数据安全解决方案

在政企领域&#xff0c;不同场景和用户往往有着层次不一的安全需求。传统的单一安全解决方案已经无法满足这些复杂而多样化的需求&#xff0c;因此&#xff0c;高灵活性和高扩展性的模块化沙箱应运而生。这种新型数据安全产品通过“积木式”的模块组合&#xff0c;能够精确、灵…

Keysight 是德 DSAX93204A 高性能示波器

Keysight 是德 DSAX93204A 高性能示波器 DSAX93204A Infiniium 高性能示波器&#xff1a; 33 GHz 高带宽实时示波器 zui佳的 33 GHz 真正模拟带宽80 GSa/s 采样率&#xff0c;2 通道&#xff1b;40 GSa/s 采样率&#xff0c;4 通道zui深的存储深度――高达 2 Gpts 存储器&am…

怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~

怎么办&#xff1f;我的C盘又爆红了&#xff01;别慌&#xff01;博主手把手带你管理你的C盘空间~ 文章目录 怎么办&#xff1f;我的C盘又爆红了&#xff01;别慌&#xff01;博主手把手带你管理你的C盘空间~0. 在开始清理之前1. 推荐执行的操作1.1 清理系统缓存文件1.2 磁盘清…

极客天成ScaleFlash与南大通用数据库兼容互认证

近日&#xff0c;北京极客天成科技有限公司与天津南大通用数据技术股份有限公司完成产品兼容性互认证&#xff0c;测试结果表明&#xff0c;极客天成分布式存储软件[简称NVMatrix]V3.0与南大通用多模多态数据库管理系统[简称GBase 8c]V5产品兼容性良好、运行稳定。 北京极客天成…

第三期书生大模型实战营 第2关 Python 基础知识

第三期书生大模型实战营 第2关 Python 基础知识 第三期书生大模型实战营 第2关 Python 基础知识Python 基础函数定义常见的内置方法replace(old, new)lower()split() 字典dict 使用Python实现词频统计使用VSCode进行调试总结 第三期书生大模型实战营 第2关 Python 基础知识 Hel…

Python基础教学之三:函数与模块篇——实现代码重用和模块化

Python基础教学之三&#xff1a;函数与模块篇——实现代码重用和模块化 一、函数的定义与使用 1. 理解函数 函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码块。它可以提高代码的重用性和程序的清晰度。 你可以定义一个由自己想要功能的函数&#xff0c;以下是…

星环科技知识平台TKH:引领企业构建高效AI基础设施,加速数智化转型新纪元

5月30-31日&#xff0c;2024向星力未来数据技术峰会期间&#xff0c;星环科技正式发布其最新人工智能基础设施产品——Transwarp Knowledge Hub星环知识平台&#xff08;以下简称TKH&#xff09;。该平台旨在为企业打通从人工智能基础设施建设到大数据、人工智能等研发应用的完…

Kafka-02 @KafkaListener学习

一. 引入依赖 SpringBoot 和 Kafka 搭配使用的场景&#xff0c;引入 spring-kafka 即可&#xff1b; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.11</version>…

数据交换系列-DWG数据交换方案选型

1.背景介绍 1.1 什么是块 块相当于一个“标准件”&#xff0c;当你要用的时候可以随意插入&#xff0c;插入的时候可以旋转角度&#xff0c;还可以定义比例。块 &#xff0c;在CAD中&#xff0c;就是一个、或一组图形实体的总称&#xff0c;可以包含任意对象&#xff0c;简单…

Linux(一)线程——何为线程???Linux线程控制

文章目录 什么是线程&#xff1f;&#xff1f;&#xff1f;线程和进程的区别和联系Linux线程控制POSIX线程库创建线程线程等待线程终止线程分离 什么是线程&#xff1f;&#xff1f;&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的…

Airtest成功案例分享:KLab连续2年携Airtest私有云产品参加CEDEC大会!

一、KLab株式会社介绍 KLab株式会社是一家位于日本的移动游戏开发公司&#xff0c;成立于2000年。公司以开发和运营基于动漫和漫画IP的手机游戏而闻名&#xff0c;尤其是在音乐节奏游戏领域。KLab的一些知名作品包括《LoveLive!学园偶像祭》、《排球少年&#xff1a;新的征程》…

【Redis】Redis十大类型

文章目录 前言一、string字符串类型二、List列表类型三、 Hash表四、 Set集合五、 ZSet有序集合六、 GEO地理空间七、 HyperLogLog基数统计八、Bitmap位图九、bitfield位域十、 Stream流10.1 队列指令10.2 消费组指令10.3 ACK机制 前言 redis是k-v键值对进行存储&#xff0c;k…

c#中的设计模式

1、设计模式 MVVM、MVC、GOF23种设计模式 2、GOF23种设计模式分类 创建型&#xff1a;对类的现实化进行了抽象&#xff0c;能够使软件模块做到与对象的创建和组织无关。 包括&#xff1a;单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式 结构型&#xff1a;描述类…

PHP充电桩小程序系统源码

绿色出行新伴侣&#xff01;充电桩小程序&#xff0c;让充电不再烦恼✨ &#x1f50b; 开篇&#xff1a;告别电量焦虑&#xff0c;充电桩小程序来救场&#xff01; 在这个电动车日益普及的时代&#xff0c;电量不足成了不少车主的“心头大患”。但别担心&#xff0c;充电桩小…