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
  • 相关阅读:
    Go Example--方法
    Go Example--结构体
    Flutter项目实操---我的界面搭建、开源中国API流程了解、HTTP请求封装、登录处理<二>
    Java精通并发-CAS底层实现与AtomicInteger源码剖析、关于CAS问题描述
    大数据JavaWeb之JDBC基础----快速入门、各个类详解(DriverManager、Connection、Statement)
    Flutter项目实操---开源中国之项目说明、基础框架搭建、基础BottomBar、侧滑菜单<一>
    Kotlin项目实战之手机影音---主界面tab切换、home界面适配、获得首页网络数据
    android高级UI之Canvas综合案例操练
    开启Fluter基础之旅<六>-------自定义View、牛逼动画效果
    Z-score
  • 原文地址:https://www.cnblogs.com/xudachen/p/8672352.html
Copyright © 2011-2022 走看看