Python异常捕获和java里的大同小异,也都是以try开始,但是python里的捕获用except,java里用的是catch,但是功能都一样都是出现异常进行捕获,那咱们就来看一下代码使用
首先看一下遇见异常不捕获异常的情况
print("test-------------------------1")
f= open("123.txt","r") # 发生运行异常不处理后续代码
print("test-------------------------2")
由于没有123.txt的文件,所以也无法读取到,程序会报找不到错误异常,后续的代码也不会执行
捕获异常,由于open是关于文件的操作,所以捕获IO异常
# 捕获异常
try:
print("test-------------------------1")
f= open("123.txt","r")
print("test-------------------------2")
except IOError: #文件没找到就是Io异常(输入输出异常)
pass
当出现错误时则进入捕获块,也就是except,我们又编写了pass就是过,所以没有打印异常则会出现如下图所示情况
打印异常,此处没有定义变量名称,所以是NameError
# 捕获相同的异常
try:
print(num)
except NameError:
print("发生错误了")
你大概也能猜出会是如下图片错误。
可捕获多个异常,并打印异常结果:多个异常用括号扩起,并用逗号分隔
try:
print("test-------------------------1")
f = open("123.txt", "r") # 捕捉到这里有异常就不往下走了
print("test-------------------------2")
print(num)
except (NameError,IOError) as result: # 多个异常用逗号分割,并加()
# as result 则是真正的异常结果
print("发生错误了")
print(result)
打印捕获的异常结果
所有的异常都会被捕获,而不只是捕获一种,只要出现需要捕获的异常,都要捕获则使用Exception
try:
print("test-------------------------1")
f = open("file.txt", "r") # 捕捉到这里有异常就不往下走了
print("test-------------------------2")
print(num)
except Exception as result: # Exception所有的异常错误
# as result 则是真正的异常结果
print("发生错误了")
print(result)
会抛出一样的异常。
嵌套异常使用,像如下,没打开文件就出现异常则直接捕获打印,如果打开文件以后进行读取异常或其他异常,则进行捕获也要走最终关闭文件。
# try catch 嵌套
try:
f=open("file.txt","r")
try:
while True:
content=f.readline()
if len(content)==0:
break
time.sleep(2)
print(content)
finally:
f.close()
print("文件关闭")
except Exception as result:
print(result)
打开文件报错情况
当文件打开以后执行后续代码出现问题,则文件关闭然后抛出异常,嵌套异常可针对不同模块进行有针对的抛出异常处理连接问题。
课堂练习:
1.通过python新建文件gushi.txt,并写入一首古诗,考虑异常!
2.读取文件gushi.txt,将内容复制到copy.txt中,并在控制台输出复制完成,需要考虑异常!
ps:python的文件操作上节就是哦!