Python-异常处理机制

来源:互联网 发布:照片后期制作软件 编辑:程序博客网 时间:2024/05/21 22:52

 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 sysif __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
原创粉丝点击