博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---22、异常的处理

Posted on 2019-11-21 19:35  兰智杰  阅读(292)  评论(0编辑  收藏  举报

异常

  Python遇到错误后,会引发异常;如果异常对象并未被处理或捕捉,则程序就会用所谓的回溯(Traceback,一种错误信息)来终止执行   

    

异常的处理

  1、异常是指在程序执行过程中发生的一个事件,会影响程序的正常运行,所以一般需要进行捕获异常并处理

  2、异常的捕获使用try/except/else/finally语句进行捕获操作,并告诉python发生异常时怎么办

  3、将导致错误的代码行放在了一个try代码块中,如果try代码块中的代码运行起来没有问题,python将跳过except代码块;如果try代码块中的代码导致了错误,python将查找这样的except代码块,并运行其中的代码,要求except中指定的错误与引发的错误相同,否则继续报错

try:
    print(a)                      #如果这句话有错,就会捕获到异常
except ValueError:                #NameError 异常,不匹配所以不执行
    print('变量未定义')
except NameError:                 #对NameError异常的处理
    print('变量未定义')              #输出为 变量未定义

#捕获异常的具体信息
try:
    print(b)                      #如果这句话有错,就会捕获到异常
except NameError as error:
    print(error)                  #打印具体的异常信息  输出为 name 'b' is not defined

#包含多个异常,只要检测到一个错误,异常检测就不再运行
try:
    #print(c)
    files = open('异常实验1.txt','r',encoding= 'utf-8')      #如果这句话有错,就会捕获到异常
except (NameError,FileNotFoundError) as error:               #通过元组放入多个异常类型
    print(error)                                  #输出为 [Errno 2] No such file or directory: '异常实验1.txt'

#所有异常
try:
    print(d)
    files = open('异常实验.txt','r',encoding= 'utf-8')      #如果这句话有错,就会捕获到异常
except Exception as error:
    print(error)                                 #输出为 name 'd' is not defined

'''
    esle:没有异常时要执行的语句
'''
try:
    files = open('异常实验.txt','r',encoding= 'utf-8')        #如果这句话有错,就会捕获到异常
except Exception as error:                                   #有异常时执行
    print(error)
else:                                                        #没有异常时执行
    print('没什么问题')                                        #输出为 没什么问题

'''
    finally:不管有没有异常都会执行的代码块
'''
try:
    print('打开文件!')                                    #输出为 打开文件!
    files = open('异常实验.txt','w',encoding='utf-8')
    try:
        files.write('测试一下行不行')
    except:
        print('写入失败')                                 #没有执行,代表写入成功
    else:
        print('写入成功')                                 #输出为 写入成功
    finally:                                             #不管有没有异常都要执行的代码块
        print('关闭文件')                                 #输出为 关闭文件
        files.close()
except Exception as error:
    print(error)                                         #没有执行,第一个try里的代码正确

小练习

  加法运算:提示用户提供数值输入时,用户提供的是文本而不是数字,在这种情况下,当你尝试将输入转换为整数时,如果用户的输入不是数字而是字母,将引发ValueError异常;编写一个程序,提示用户输入两个数字,将它们相加并打印结果;在用户输入的任何一个值不是数字而是字母时都捕获ValueError异常,并打印一条友好的错误消息

try:
    num1 = int(input('请输入第一个数字:'))
    num2 = int(input('请输入第二个数字:'))
except ValueError:
    print('输入类型有误,请输入数字')
else:
    print(num1+num2)

常见异常

  

  

  

总结

  try语句按照如下方式工作:

    1、首先,执行try子句(在关键字try和关键字except之间的语句)

    2、如果没有异常发生,忽略except子句,try子句执行后结束

    3、如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略,如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行,最后执行 try 语句之后的代码。

    4、如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中(嵌套)

    5、一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常

    6、至多只有一个分支会被执行,处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常

    7、一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组