zoukankan      html  css  js  c++  java
  • Python----面向对象---try....except的详细用法

    try..except...详细用法

    1、如果一段代码有多种类型的错误,例如:

     1 try:
     2     print('======1')
     3     name
     4     print('======2')
     5     l = [1, 2, 3]
     6     l[100]
     7     print('======3')
     8     d = {}
     9     d['name']
    10     print('======4')
    11 
    12 except NameError as e:
    13     print('---->', e)
    14 
    15 结果为:
    16 
    17 ======1
    18 ----> name 'name' is not defined

    定制什么类型异常,能捕获相应的异常,但是没有指定的异常的话还是会报错的,

     1 try:
     2     print('======1')
     3     # name
     4     print('======2')
     5     l = [1, 2, 3]
     6     l[100]
     7     print('======3')
     8     d = {}
     9     d['name']
    10     print('======4')
    11 
    12 except NameError as e:
    13     print('---->', e)
    14 
    15 结果为:
    16 
    17 ======1
    18 Traceback (most recent call last):
    19 ======2
    20   File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/33 try...except详细用法.py", line 8, in <module>
    21     l[100]
    22 IndexError: list index out of range

    这样的话,能不能写多个except呢,答案是可以的,这就是异常的多分支

     1 try:
     2     print('======1')
     3     # name
     4     print('======2')
     5     l = [1, 2, 3]
     6     # l[100]
     7     print('======3')
     8     d = {}
     9     d['name']
    10     print('======4')
    11 
    12 except NameError as e:
    13     print('---->', e)
    14 
    15 except IndexError as e:
    16     print('---->', e)
    17 
    18 except KeyError as e:
    19     print('---->', e)
    20 
    21 结果为:
    22 
    23 ======1
    24 ======2
    25 ======3
    26 ----> 'name'

    这样就能捕获多种类型的异常,

    多分支:被检测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑

     1 try:
     2     print('======1')
     3     # name
     4     print('======2')
     5     l = [1, 2, 3]
     6     # l[100]
     7     print('======3')
     8     d = {}
     9     d['name']
    10     print('======4')
    11 
    12 except NameError as e:
    13     print('---->', e)
    14 
    15 except IndexError as e:
    16     print('---->', e)
    17 
    18 except KeyError as e:
    19     print('---->', e)
    20 
    21 print('after code')
    22 
    23 结果为:
    24 
    25 ======1
    26 ======2
    27 ======3
    28 ----> 'name'
    29 after code

    捕获异常后的代码会正常执行,

    万能异常:Exception ,被检测的代码块抛出的异常有多种可能性,并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用Exception,

     1 try:
     2     print('======1')
     3     # name
     4     print('======2')
     5     l = [1, 2, 3]
     6     # l[100]
     7     print('======3')
     8     d = {}
     9     d['name']
    10     print('======4')
    11 
    12 except Exception as e:
    13     print('---->', e)
    14 
    15 
    16 print('after code')
    17 
    18 结果为:
    19 
    20  ======1
    21 ======2
    22 ======3
    23 ----> 'name'
    24 after code

    当然,万能异常也可以和定制异常混合使用,除了我们关心的异常使用定制异常,其它的异常类型我们使用万能异常

    代码示例如下:

     1 try:
     2     print('======1')
     3     name
     4     print('======2')
     5     l = [1, 2, 3]
     6     l[100]
     7     print('======3')
     8     d = {}
     9     d['name']
    10     print('======4')
    11 
    12 except NameError as e:
    13     print('---->', e)
    14 
    15 except IndexError as e:
    16     print('---->', e)
    17 
    18 except KeyError as e:
    19     print('---->', e)
    20 
    21 except Exception as e:
    22     print('---->', e)
    23 
    24 
    25 print('after code')
    26 
    27 结果为:
    28 
    29 ======1
    30 ----> name 'name' is not defined
    31 after code

     还可以在except后加else判断语句,该语句会在被检测的代码块没有发生异常时执行

    如:

     1 try:
     2     print('======1')
     3     # name
     4     print('======2')
     5     l = [1, 2, 3]
     6     # l[100]
     7     print('======3')
     8     d = {}
     9     # d['name']
    10     print('======4')
    11 
    12 except NameError as e:
    13     print('---->', e)
    14 
    15 except IndexError as e:
    16     print('---->', e)
    17 
    18 except KeyError as e:
    19     print('---->', e)
    20 
    21 except Exception as e:
    22     print('---->', e)
    23 
    24 else:
    25     print('在被检测代码块没有发生异常时执行')
    26 
    27 
    28 print('after code')
    29 
    30 结果为:
    31 
    32 ======1
    33 ======2
    34 ======3
    35 ======4
    36 在被检测代码块没有发生异常时执行
    37 after code

    加finally语句,不管被检测的代码块有没有发生异常都会执行

     1 try:
     2     print('======1')
     3     # name
     4     print('======2')
     5     l = [1, 2, 3]
     6     # l[100]
     7     print('======3')
     8     d = {}
     9     d['name']
    10     print('======4')
    11 
    12 except NameError as e:
    13     print('---->', e)
    14 
    15 except IndexError as e:
    16     print('---->', e)
    17 
    18 except KeyError as e:
    19     print('---->', e)
    20 
    21 except Exception as e:
    22     print('---->', e)
    23 
    24 else:
    25     print('在被检测代码块没有发生异常时执行')
    26 
    27 finally:
    28     print('不管被检测的代码块有没有发生异常都会执行')
    29 
    30 
    31 print('after code')
    32 
    33 结果为:
    34 
    35 
    36 ======1
    37 ======2
    38 ======3
    39 ----> 'name'
    40 不管被检测的代码块有没有发生异常都会执行
    41 after code

    finally的代码应用案例:

     1 try:
     2     f = open('a.txt')
     3     print(next(f))
     4     print(next(f))
     5     print(next(f))
     6     print(next(f))
     7     print(next(f))
     8     print(next(f))
     9     print(next(f))
    10 
    11 finally:
    12     print('final')
    13     f.close()
    14 
    15 结果为:
    16 
    17 111
    18 Traceback (most recent call last):
    19 
    20 222
    21 
    22 333
    23   File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/33 try...except详细用法.py", line 42, in <module>
    24 
    25 444
    26     print(next(f))
    27 
    28 StopIteration
    29 555
    30 final
  • 相关阅读:
    Integration Services学习(3):数据流任务(下) (转自游子吟)
    delete和truncate的区别
    Integration Services 学习(6):包配置 (转自游子吟)
    SSIS 学习(2):数据流任务(上) (转自游子吟)
    Integration Services 学习(5):容器 (转自游子吟)
    Integration Services 学习(4):变量和表达式 (转自游子吟)
    in与exist , not in与not exist 的区别
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
    关于Reporting Services的Q&A
    SSIS 学习(1) 概要 (转自游子吟)
  • 原文地址:https://www.cnblogs.com/xudachen/p/8672352.html
Copyright © 2011-2022 走看看