Python中的异常处理

来源:互联网 发布:小说写作软件 编辑:程序博客网 时间:2024/06/07 05:31

当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的”异常”。

一、捕获异常 try…except…

看如下示例:

try:    print('test1')    open('123.txt','r')    print('test2')except IOError:    pass

此时可以正常运行,运行结果为“test1”。

说明:

  • 此程序看不到任何错误,因为用except 捕获到了IOError异常,并添加了处理的方法
  • pass 表示实现了相应的实现,但什么也不做。

try…except…用法:

  • 把可能出现问题的代码,放在try中。
  • 把处理异常的代码,放在except中。

1、except捕获多个异常

看如下示例:

try:    print numexcept IOError:    print('产生错误了')

这时程序报错了,但是明明已经处理异常了呀,为什么不能输出“产生错误了”,而是报错呢?
这是因为except捕获的错误类型是IOError,而此时程序产生的异常为 NameError ,所以except没有生效。
修改的代码为:

try:    print numexcept NameError:    print('产生错误了')

此时程序就可以正常运行了。
但是如果123.txt文件不存在,那么会产生 IOError 异常,如果num变量没有定义,那么会产生 NameError 异常,那么多异常,如果想通过一次except捕获到多个异常怎么办?可以用一个元组的方式。

try:    print('test1')    open('123.txt','r')     print('test2')    print(num)except (IOError,NameError):     pass
  • 当捕获多个异常时,可以把要捕获的异常的名字,放到except 后,并使用元组的方式仅进行存储

2、捕获所有异常

try:    print(a)    open('a.txt')except:    print('产生错误了')

这样可以捕获所有异常,但是我们不知道产生的异常是什么。

获取异常的信息

try:    open('a.txt')except Exception as result:    print(result)

结果为:
No such file or directory: ‘a.txt’

这样我们就能获取异常的信息了。

二、else

我们应该对else并不陌生,在if中,它的作用是当条件不满足时执行的实行;同样在try…except…中也是如此:如果没有捕获到异常,那么就执行else中的事情。

try:    num = 100    print numexcept NameError as errorMsg:    print('产生错误了:%s'%errorMsg)else:    print('没有捕获到异常')

结果为:
100
没有捕获到异常

三、try…finally…

在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等。

try:    f = open('test.txt')    try:        while True:            content = f.readline()            if len(content) == 0:                break            print(content)    except:        #如果在读取文件的过程中,产生了异常,那么就会捕获到        pass    finally:        f.close()        print('关闭文件')except:    print("没有这个文件")
原创粉丝点击