当前位置:
文档之家› 第7章 PythonPytho程序设计基础教程-异常处理和文件操作
第7章 PythonPytho程序设计基础教程-异常处理和文件操作
11
finally举例
# 例 7-4加入finally语句的异常处理示例 a=36 nums=[2,4,0,3] for i in range(5):
try: print(a/nums[i])
except: print("Exception happened")
finally: print("%d times" % i)
wfile.write(“Tiger\n”) wfile.write("Dog\n") wfile.write(“Cat\n”)
#在文件中写入一行字符串“Tiger” #在文件中写入一行字符串“Dog” #在文件中写入一行字符串“Cat”
wfile.close()
#文件写入完毕,关闭文件
20
追加文件内容
12
断言
使用assert断言是学习Python一个非常好 的习惯,在没完善一个程序之前,我们不 知道程序在哪里会出错,与其让它在运行 时崩溃,不如在出现错误条件时就崩溃, 这时候就需要assert断言的帮助。
断言的语法如下:
assert expression[, arguments]
13
以下程序不会产生断言异常
程序中的错误
Python语言编写的程序代码中包含3种错 误,分别是语法错误、语义错误和运行时 错误,因为包含语法错误的程序无法顺利 被计算机识别,所以Python解释器会帮助 我们在运行程序之前就修正各种语法错误 ;语义错误是因为程序员采用了错误的算 法导致的,我们可以通过反复运行程序, 输入各种类型的测试数据,然后观察程序 的运行结果发现并修正此类错误。
18
文件操作的步骤
在知道文件所在路径之后,Python语言可 以对文件进行操作,一个完整的文件操作 的步骤是:
1. 打开文件; 2. 读文件或写文件; 3. 关闭文件。
19
写文件操作
# 例 7-8写文件操作示例 #以写的方式打开文件D:/li07-1.txt,得到文件操作对象wfile wfile = open(“D:/li07-1.txt”, ‘w’)
try: print(a/num)
except ZeroDivisionError: print("%d is divided by 0" % a)
9
对不同异常的处理
# 例 7-3在程序中处理不同类型的异常 a=36 nums=[2,4,0,3] for i in range(5):
try: print(a/nums[i])
28
29
Python语言程序设计
南京邮电大 异常处理和文件操作
学习目标
掌握异常处理的方法 掌握断言的使用 掌握打开文件、读文件和写文件的方法
3
引言
程序在编制的过程中,难免包含各种各样 的缺陷和错误,虽然我们已经尽可能编写 正确的程序代码,但这并不足以消灭所有 导致程序出错的因素,所以,我们必须学 会使用异常处理机制,来削弱可能发生的 错误对程序执行产生的负面作用。
17
文件名和路径
大多数操作系统中(包括Windows),文件名 中有一部分用来指示文件中包含什么类型的数据 。文件名中通常至少有一个点(.),点后面的部 分指出了文件的类型,这一部分称为扩展名。每 个文件都要存储在某个地方,所位于其他文件夹 中的文件夹称为子文件夹,这称为路径,描述了 文件在文件夹结构中的位置,如:C:/Windows /regedit.exe,D:/python/chapter7/data.t xt等,其中.exe和.txt表示文件的扩展名。
# 例 7-5不会产生异常的断言语句示例 assert 1==1 assert 2+2==2*2 assert len(['my boy',12])<10 assert range(4)==[0,1,2,3]
14
产生断言异常的例子
以下几个assert中的表达式的值为假,就会 抛出异常:
#例 7-6将会触发AssertionError异常的语句示例 assert 2==1 assert len([1, 2, 3, 4]) > 4
except IOError: print("File not found")
26
本章小结
异常处理用于处理程序运行时发生的错误,主要 的关键字包括try、except和finally,其中try语 句用于尝试执行代码,如果发生异常,则用exce pt用于抓取异常并进行处理,不管是否发生异常f inally语句必定会被执行。
15
断言的使用
#例 7-7包含断言机制的程序代码示例 a=36 nums=[2,4,0,3] assert len(nums)>=5 #判断列表nums的长度是否大于5,不成立则不进行下面的代码 for i in range(5):
assert nums[i]!=0 #判断列表中是否存在0,若存在则数据不合法,不进行下一步运算 for i in range(5): print(a/nums[i])
5
而运行时错误,往往是因为程序在执行过 程中遇到了一些开发人员没有考虑到的特 殊情况所导致的,所以软件开发单位一般 无法在软件发布前消灭所有的运行时错误 ,此时,为了提高软件的容错性、改善软 件在遇到错误时的用户体验,Python提供 了一种名为异常处理的机制,这种机制帮 助程序更好地应对执行过程中遇到的特殊 情况,避免软件系统因为遇到错误而直接 崩溃。
# 例 7-9以追加方式打开文件示例 wfile = open("D:/li07-1.txt", 'a') wfile.write("Horse\n") wfile.write("Cow\n") wfile.write("Sheep\n") wfile.close()
21
读取文件内容
# 例 7-11读文件操作示例 rfile = open("D:/li07-1.txt", 'r') text=rfile.read() rfile.close() print(text)
6
运行时错误
举例说明,代码如下:
# 例 7-1 打印两个整数的实数商 a=36 nums=[2,4,0,3] for num in lst:
print(a/num)
运行之后会产生如下结果:
18 6 ZeroDivisionError: integer division or modulo by zero
7
try……except语句
以下为简单的try....except...的语法:
try: <语句块1> #运行的代码
except <异常1>: #“异常1”是发生的异常的名字,可以省略 <语句块2> #如果在try部份引发了 “异常1” ,则执行语句2
8
对上述程序的修改
# 例 7-2带异常处理机制的打印两个整数的实数商 a=36 nums=[2,4,0,3] for num in nums:
23
readlines方法
我们还可以调用readlines()读取文件中所 有行,代码如下所示:
# 例 7-13使用readlines函数可以读取文件中所有的 行 rfile = open("D:/li07-1.txt", 'r') lines=rfile.readlines() rfile.close() for line in lines:
断言的关键词是assert,如果assert后的语句结 果为假,则会抛出AssertionError异常,用于对 程序顺利执行的前提条件进行限定,如果前提条 件不满足则使代码提前结束。
27
本章小结
文件操作包括打开文件、写文件、读文件、关闭文件等操 作。打开文件的函数是open()函数,该函数的第一个参 数是文件路径,第二个参数是文件打开方式,本章介绍了 w(写),a(追加),r(读)等三种打开方式;本章介 绍了写文件的函数write();本章介绍了三个读文件的函 数,分别是用于读取文件中全部文本的read()函数,用 于读取一行的readline(),用于读取所有行的readlines( )函数。读文件时可能会发生文件不存在的异常,需要用t ry…catch语句进行处理。关闭文件的函数是close()函数 ,用于释放打开文件所占用的资源,使用with语句可以 自动释放资源。
except ZeroDivisionError: print("%d is divided by 0" % a)
except IndexError: print("Index out of list bounds")
10
finally语句
为了防止try中的语句块没有正常执行完毕 ,从而导致产生其他的错误,还需要给异 常处理机制加上一个善后功能,使用finall y关键字包含一段无论异常有没有发生都会 执行的代码块,finally包含的代码块一般 用来释放try语句块中已执行代码所占用的 各类计算机资源,防止计算机资源耗尽从 而导致整个计算机系统崩溃。
25
with举例
# 例 7-15使用with语句管理文件文件资源示例 try:
with open("D:/li07-1.txt", 'r') as rfile: lines=rfile.readlines() for line in lines: line=line.replace('\n','') print(line)
line=line.replace('\n','') print(line)