Python-异常处理机制

 Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。


Python 异常处理方式一:try-except

我们试图打开一个不存在的文件aa.txt

open('aa.txt')
程序会Traceback,终止执行

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    f = open('aa.txt')
FileNotFoundError: [Errno 2] No such file or directory: 'aa.txt'

我们会用try-except块来包含可能会抛出异常的代码段,进行异常捕捉处理

try:
    f = open('aa.txt')
except FileNotFoundError as e:
    print('文件不存在')

执行结果:except块中的代码会被执行

文件不存在


finally块: 如果try块中的代码捕捉到异常,程序会跳转到except块中,try块中剩余的代码遍不在执行。如果没有捕捉到异常,try块中的代码可以完全执行。finally块中的代码,无论有没有捕捉到异常都会被执行

if __name__ == '__main__':
    try:
        open('aa.txt')
    except FileNotFoundError as e:
        print("文件不存在")
    finally:
        print('finally ...')
结果一:

文件不存在
finally ...

结果二:

finally ...

try-except-else模块

if __name__ == '__main__':
    try:
        open('test.txt')
    except FileNotFoundError as e:
        print("文件不存在")
    else:
        print("文件存在")
    finally:
        print('finally ...')

如果try中没有捕捉到异常,会执行else块中的代码。

结果一:

文件存在
finally ...

结果二:

文件不存在
finally ...


我们还可以对异常进行多次捕捉

import sys
if __name__ == '__main__':
    lst = [0,1]
    hello = 'aa'
    try:
        open('test.txt')
        print(hello) ##变量hello没有定义,会抛出NameError
        print(lst[2])##index out of range,抛出IndexError
    except FileNotFoundError as e:
        print("文件不存在")
    except NameError as e:
        print(e)
    #except IndexError as e:
    #    print(e)
    except:
        print("Unexpected error:", sys.exc_info()[0])
如果try中的前两行都没有抛出异常,第三行则会抛出异常,但是在代码中我并没有指定异常类型进行捕捉,程序会执行最后一个except块

aa
Unexpected error: <class 'IndexError'>



Python 异常处理方式二:raise

在一个函数中,我们可能想要抛出一个异常,而不是在这个函数中进行处理

def raise_ex(args):
    if args == 'err':
        raise NameError('Invalid name is %s' % args)
    else:
        print('name: %s' % args)
    
if __name__ == '__main__':
    name = input('请输入name:')
    try:
        f = raise_ex(name)
    except NameError as e:
        print('函数raise_ex抛出异常: %s' % e)
结果一:

请输入name:aa
name: aa

结果二:

请输入name:err
函数raise_ex抛出异常: Invalid name is err




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值