版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章异常处理与文件操作Python程序设计01异常处理02文件操作03本章回顾异常处理与文件操作程序设计要求程序有健壮性,但运行时存在导致程序不能正常运行的不确定因素,为增强交互性和便于诊断错误,要将不确定因素解释为异常并处理。在实际开发中异常处理必不可少,文件操作使用频率高(包括读写、复制等)且操作过程中常需异常处理,因此将二者放在一章介绍。01异常处理
异常是在程序运行过程中,影响程序正常执行的一个事件。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。本节将对常见的内置异常、异常处理语句和自定义异常进行介绍。Python常用内置异常我们之前遇到的NameError、SyntaxError、TypeError等都是异常,Python常见的内置异常总结如表所示。Python中异常继承关系Python中所有异常的基类是BaseException,所有常规错误的基类是Exception,所有的警告基类是Warning,主要异常类的继承关系如下图所示。异常处理语句在程序开发过程中,有些异常是在输入不合法时才会出现,此时我们可以对可能出现异常的情况进行处理。Python中异常处理的语句有try...except、try...except...else和try...except...finally三种。1.try...except语句捕捉异常可以使用try...except语句,try语句块用来检测错误,except语句捕获异常信息并处理。在使用时,try语句块中放入可能发生错误的代码,except语句块中放入处理结果,当try语句块中代码出现错误时就执行except语句块中的代码,若try语句块中代码没有出现错误则except语句块中的代码不会执行。异常处理语句
(1)语法格式与参数说明try...except语句的语法格式如下:参数说明如表所示。异常处理语句(2)try...except语句的使用接下来我们演示try...except语句的使用,首先定义一个计算销量的函数count(),如下所示。如果没有做任何异常处理,当输入单价为0时,将引发“ZeroDivisionError”异常,如右图所示。异常处理语句此时我们使用try...except语句进
行异常处理,将count()方法放到try语句块中,将发生错误的提示信息放到except中,如下图所示。
运行【代码7-1】,此时再将price输入为0,将不会出现“ZeroDivisionError”异常,而是输出except中的提示信息,结果如下图所示。异常处理语句(3)多异常处理目前我们只处理了“ZeroDivisionError”异常,由于在定义count()函数时,price参数的类型时int,若输入小数,将会引发“ValueError”异常,如下图所示。异常处理语句此时我们可以再一个except语句对ValueError异常进行处理,如右图所示。从右图中可以看出,此时若再将price输入为小数,将不会出现“ValueError”异常,而是打印except中的提示信息。异常处理语句2.try...except...else语句与try...except...finally语句在上述异常处理语句try...except基础上,还可以增加else语句和finally语句,else语句的作用是当try语句中没有出现异常时执行,finally语句是无论程序运行中是否发生异常都会执行。try...except语句、try...except...else语句和try...except...finally语句的执行逻辑如右图所示。异常处理语句还是上面的案例,在上诉代码的基础上增加else语句块和finally语句块,如右图所示。异常处理语句上图代码的运行结果可总结如下图所示。自定义异常在程序开发过程中,当使用标准内置异常不能满足业务需求时,就需要自定义异常。自定义异常需要直接或者间接继承“Exception”异常类,然后使用raise语句抛出异常。自定义异常的应用举例如右图所示。自定义异常上诉代码的运行结果如下图所示。02文件操作由于大部分数据都是通过文件进行存储的,所以文件操作在程序开发过程中是比较重要的一部分,也是程序员必须掌握的知识点。本节将介绍Python内置文件对象File的基本操作和Excel文件的基本操作。文件基本操作1.文件分类我们在日常生活或工作中接触的文件类型有很多,如Word文件、PPT文件、音频文件、视频文件等。而无论何种类型的文件,在内存或磁盘上最终都是以二进制编码存储的。所以根据逻辑上编码的不同,文件只分为文本文件和二进制文件两类。(1)文本文件文本文件存储的是人类可以直接阅读的字符,采用的是字符编码,如ASCII、Unicode编码、GBK、UTF-8等。文本文件经过编解码过程就可以转换成人类理解的信息,编码过程就是将字符转换成二进制,解码过程就是将二进制还原成字符。文件基本操作(2)二进制文件二进制文件存储的是字符以外的其它信息,包括图片、声音、视频等,采用的是值编码,以字符串的形式存储。二进制文件是按照一定的规则,把信息转换成二进制存储到文件中,但由于图片、声音、视频格式转换比较复杂,而且各有各的标准,所以为了简化将其归为一类。2.文件的打开和关闭(1)文件打开函数在Python中,想要操作文件首先需要打开并创建一个文件对象,通过open()函数即可实现文件打开,其语法格式如下:文件基本操作参数说明如右表所示。参数“access_mode”
的取值如右表所示。文件基本操作文件基本操作参数“buffering”的取值如表所示。
正常情况下,程序运行在内存中,而缓冲区就是一个内存空间,它可以视为一个FIFO(先进先出)队列,当缓冲区达到阈值或者满了的时候,数据会被flush到磁盘。需要注意的是,对于参数“buffering”一般建议使用默认的缓冲区设置,除非明确知道缓冲区所需大小。文件基本操作(2)文件关闭函数文件打开之后,需要及时进行关闭,通过close()函数即可实现文件关闭,其语法格式如下:其中file代表之前打开的、待关闭的文件对象。文件操作一般需要和异常处理语句结合使用,而close()函数一般会放在finally语句块中。close()函数运行时会先刷新缓冲区还没写入的信息,然后再关闭文件。文件基本操作(3)文件打开和关闭的应用接下来我们演示一下文件打开和闭关函数的使用,首先在JupyterNotebook中新建一个文本文件,如右图所示。然后将新建的文件重命名为“test.txt”,并编辑一些文本内容,如右图所示。文件基本操作此时可以使用代码“file=open('test.txt')”打开文件,然后访问file对象,运行结果如右图所示。从上图中可以看出,由于我们没有传递参数“access_mode”,所以是采用默认方式“r”(只读)打开,编码是“cp936”。如果我们想使用编码“utf-8”打开,可以使用代码“file=open('test.txt',encoding='utf-8')”,此时再访问file文件,编码即变为了“utf-8”,如右图所示。文件基本操作有了文件对象之后,还可以通过mode、name、closed属性分别获取打开模式、名字和是否已经关闭信息,如右图所示。如果我们打开一个不存在的文件,将会出现“FileNotFoundError”异常,如右图所示。文件基本操作此时可以将打开文件进行异常处理,并在finally语句中进行文件关闭,如右图所示。文件基本操作上诉代码的运行结果分别如图1和图2所示。文件基本操作3.文件读写Python中的file对象提供了一些方法用于对文件进行读写,常用的总结如表所示。文件基本操作以下是一个读写文件的小案例。下图代码的运行结果如下图所示。文件基本操作需要注意的是,在读写模式下如果是先写后读,写入后由于文件指针会移动到文件尾,想要读取文件内容需要将文件指针移动到文件头位置(f.seek(0))。运行完上图代码之后,由于我们之前没“test1.txt”文件,在“w+”读写模式下,如果文件不存在,会创建一个新文件,此时可发现JupyterNotebook中多了一个文件“test1.txt”,文件的内容如下图所示。文件基本操作上诉代码中是使用的read()函数读取数据,接下来分别使用readline()和readlines(),查看它们之间的区别,如下图所示。使用os模块操作文件及目录Python中的os模块及其子模块os.path提供了一些方法用来处理文件和目录。1.文件处理os模块分别提供了rename()函数和remove()函数来重命名和删除文件,rename()函数主要传递两个参数,第一个参数是文件原名,第二个参数为文件的新名字,其语法格式如下:使用os模块操作文件及目录remove()函数的参数就是待删除文件的路径,如想要删除上面重命名后的“test2.txt”文件,可使用代码“os.remove('test2.txt')”。
如我们要将前面代码中的文件“test1.txt”重命名为“test2.txt”,可使用代码“os.rename('test1.txt','test2.txt')”,如下图所示。使用os模块操作文件及目录2.目录操作(1)创建目录os模块中最基础的用于创建目录的函数是os.mkdir(path),如我们想在E盘下新建一个目录test,可使用代码“os.mkdir('E:\\test')”,但若使用此方法时,E盘已存在test目录,此时会报错,如下图所示。使用os模块操作文件及目录遇到此种情况,可先使用os.path.exists(path)函数判断目录是否存在,当目录不存在时再进行创建,如右图所示。此时运行代码,结果如右图所示。使用os模块操作文件及目录创建的目录可以在指定路径下查看,如下图所示。使用os模块操作文件及目录(2)创建多级目录上述的mkdir()函数用于创建一级目录,如果给定的目录有多级,且最后一级的上级目录不存在,使用mkdir()函数会出现FileNotFoundError异常,如下图所示。使用os模块操作文件及目录此时可以使用os.makedirs(path)函数递归创建多级目录,如下图所示。使用os模块操作文件及目录(3)删除目录删除目录可以使用os.rmdir(path)函数,但是需要注意的是,此函数只能删除空目录,如我们删除前面代码中创建的目录“E:\\test\\test1”,代码为“os.rmdir('E:\\test\\test1')”,运行此代码后,再次查看test文件夹,已经为空了(代表删除成功),如下图所示。使用os模块操作文件及目录此时如果我们在test中新建一个“test.txt”文件,此时再删除test文件夹,会出现OSError错误,如下图所示。(1)
遍历目录使用os模块中的walk()函数可以获取指定目录下的所有目录及文件,其语法格式如下:使用os模块操作文件及目录参数说明如表所示。接下来对walk()函数的使用进行举例,假设有一个目录结构如右图所示。使用os模块操作文件及目录遍历上图中目录的代码如右图所示。右图代码的运行结果如右图所示。使用os模块操作文件及目录上图的运行遍历结果显示得并不友好,为了看起来更舒适,可结合拼接路径函数os.path.join()实现更好的展示效果,如右图所示。上诉代码的运行结果如下图所示。使用os模块操作文件及目录3.
常用方法总结除了上述介绍的文件处理和目录操作的相关方法,os模块和其子模块os.path还提供了获取当前工作目录、获取绝对路径等方法,为了方便大家记忆,现将常用的方法总结如表所示。Excel文件操作在开发过程中,经常需要处理Excel文件,Python中提供了一些用于处理excel文件的第三方模块。使用xlwt模块对以“.xls”为后缀(2003以前的版本)的表格文件进行写入。使用xlrd模块对以“.xls”为后缀(2003以前的版本)的表格文件进行读取。xlutils模块可以实现xlwt和xlrd之间的转换。使用openpyxl模块实现对以“.xlsx”为后缀(2007以后的版本)的表格文件的读写。Excel文件操作1.使用xlwt模块实现写入xls文件使用xlwt模块写入xls文件一般需要5个步骤,如右图所示。Excel文件操作接下来举例说明,如右图所示。Excel文件操作运行上图代码,查看E盘,发现其下已经多了一个“test.xls”文件,打开此文件查看内容,如右图所示。Excel文件操作在写入文件时,还可以进行列宽、行高、居中等设置,我们将之前的案例进行改造,如下图所示。Excel文件操作运行代码,得到新的文件“test.xls”,内容如下图所示。和前图相比,上图中的行高、列宽都有了变化,且数据已居中显示。Excel文件操作2.使用xlrd模块读取xls文件使用xlrd模块读取xls文件可总结为4步,如右图所示。Excel文件操作接下来读取前面代码中生成的“test.xls”文件,如下图所示。Excel文件操作上诉代码的运行结果如下图所示。Excel文件操作3.使用xlutils模块实现xlwt和xlrd之间的转换由于使用xlrd模块中的open_workbook()函数读取xls文件返回的“xlrd.book.Book”类型的对象是只读的,不能对其进行修改。而如果我们想要实现读取xls文件后对其进行修改,就要借助于xlutils模块。如果此Python环境中没有xlutils模块,可以使用命令“pipinstallxlutils”进行安装,如下图所示。Excel文件操作xlutils.copy模块的copy()方法可以将“xlrd.book.Book”类型转换为xlwt模块中的“xlwt.Workbook.Workbook”类型,如下图所示。Excel文件操作接下来举一个读取xls文件,然后修改保存的例子,如下图所示。Excel文件操作运行上图代码,发现E盘多了一个文件“test2.xls”,打开发现其有两个工作表,其内容如下图所示。Excel文件操作4.使用openpyxl模块进行xlsx文件的读写对于xlsx格式的Excel文件读写可以使用第三方模块openpyxl实现。(1)使用openpyxl写入xlsx文件使用openpyxl写入xlsx文件的思路与上文介绍的使用xlwt模块写入xls文件类似,都是首先导入模块,然后创建工作薄、工作表、写入数据,最后保存到指定文件,举例如右图所示。Excel文件操作运行上图代码,发现E盘多了一个文件“test3.xlsx”,其有两个工作表,内容下图所示。Excel文件操作与写入xls文件时类似,在写入xlsx文件时也可以设置行高、列宽、对齐方式等,如右图所示。Excel文件操作运行上诉代码之后,打开E盘下的“test4.xlsx”文件,内容如下图所示。Excel文件操作(2)openpyxl模块相关属性介绍上述案例中我们主要用到的是openpyxl模块的Workbook、Worksheet和Cell对象,其常用属性总结如表所示。Excel文件操作(3)使用openpyxl读取xlsx文件使用openpyxl读取xlsx文件的思路与上文介绍的使用xlrd模块读取xls文件类似,都是首先导入模块,然后获取工作薄、工作表,最后获取工作表中的内容,举例如右图所示。Excel文件操作上诉代码的运行结果如下图所示。案例【案例描述】GDP(GrossDomesticProduct),即国内生产总值,是一个国家(或地区)所有常住单位在一定时期内生产活动的最终成果。GDP是国民经济核算的核心指标,也是衡量一个国家或地区经济状况和发展水平的重要指标。现有一份表格中记录了187个国家从2000年至2017年的的GDP数据(单位:万亿元),如图7-42所示。案例【案例要求】由于表中数据较多,为了方便查看,现设计一个程序用于从当前数据表中提取某个国家的GDP信息到新的工作表中,提取后可以适当进行格式处理。【实现思路】①读取表格中数据。②根据需求获取某个国家的GDP信息。③将获取到的某个国家GDP信息保存到一个新的工作表中。④可在其中结合异常处理的方法。案例【案例代码】案例
【运行结果】运行上图代码,在输入框中输入中国,控制台输出结果如图所示。案例E盘中的gdp3.xlsx内容如右图所示。03本章回顾本章共分为两小节内容,第一小节主要介绍异常处理,包括异常概述、异常处理语句和自定义异常。第二小节主要介绍文件操作,包括文本文件的操作、二进制文件的操作、Excel文件操作等内容。本章回顾【综合练习】1.【多选】Python中的异常处理语句包括()。A.try...except语句B.try...except...else语句C.try...except...finally语句D.try…catch语句2.【多选】以下关于Python异常的描述,正确的有()。A.异常是在程序运行过程中,影响程序正常执行的一个事件B.BaseException是所有异常的基类C.Exception是所有异常的基类D.RuntimeError代表一般的运行时错误本章回顾3.【多选】以下关于Python异常处理语句的描述,正确的有()。A.在Python中,捕捉异常可以使用try...except语句B.try语句块用来检测错误C.except语句用于捕获异常信息并处理D.finally语句是无论程序运行中是否发生异常都会执行4.【多选】根据逻辑上的编码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年定制化信息系统集成服务合作合同
- 2024中药材购销诚信合作框架合同
- 电动车购销合同
- 2024年国际物流运输合作合同细则版
- 2024年正规的民间借贷合同范本
- 个人劳务派遣合同2024年
- 事业单位与劳动合同法适用浅析2024年
- 2024年简单房子出租合同样本
- 中介合同范文2024年
- 2024年老年人保姆聘用合同
- 广东省学校安全条例知识竞赛题库(附答案)安全知识考试题库
- MOOC 国情分析与商业设计-暨南大学 中国大学慕课答案
- 《光伏发电工程工程量清单计价规范》
- 【岩土工程施工技术实践实验报告2800字】
- 讲故事比赛细则、评分表
- 幼儿园:中班社会《桌子底下的动物园》
- 三年级下册口算天天100题(A4打印版)
- 电子及印制线路板(PCB)项目可行性研究报告模板
- 学校相关安全工作流程图
- 旋转挤压灌注桩技术详解
- 专业群建设解决方案框架
评论
0/150
提交评论