zoukankan      html  css  js  c++  java
  • python常识系列13-->python异常处理基础及应用

    前言

       成功者之所以成功,是因为他们不浮躁、不喧闹,长年累月,脚踏实地、不动声色地努力。
    

    一、异常处理是什么?

    • 它是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。
    • 如:文件找不到、网络连接失败、非法参数等。
    • 异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。

    二、python中的异常处理

    • 在Python无法正常处理程序时就会发生一个异常,异常是Python对象,表示一个错误,当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
    • 在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,都从基类Exception继承,而且都在exceptions模块中定义。
    • Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。
    • 在python中,捕捉异常可以使用try/except语句:try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
    • 除了try/except语句,python中常用的异常关键字还有 else、finally、raise关键字。

    三、try/except语句语法及运行规则

    try:
       block
    except [exception,[data…]]:
       block
    else:
       block
    

    异常处理语法规则:

    • 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
    • 如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
    • 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
    • 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
    • 如果没有发生异常,则执行else块代码。

    四、python异常处理 try/except 实战

    4.1 try/except基本实战

    try:
        num_list = [1, 2, 3, 4]
        print( num_list[6] )
    except IndexError as e:
        print('error:列表下标越界')
    else:
        print('不报错就执行')
    

    上述代码中,由于列表 num_list 中只包含4个值,最大下标为 3 ,但后续的代码输出 下标为 6 的值,从而引发报错,报错之后会转入 except 处理。

    4.2 人为输入异常

    try:
        input_index = int(input('请输入下标:
    '))
        num_list = [1, 2, 3, 4]
        print( num_list[input_index] )
    except IndexError as e:
        print('error:输入的列表下标越界')
    else:
        print('不报错就执行')
    

    上述代码中,把列表 num_list 的下标改成用户可输入的情况,那么输入正常,就不会触发异常,输入错误就会进行处理。

    4.3 Exception异常父类使用

    try:
        input_index = int(input('请输入下标:
    '))
        num_list = [1, 2, 3, 4]
        value = num_list[input_index]
        print( '您输入后得到的值是:' + value )
    except IndexError as e:
        print('error:输入的列表下标越界')
    except Exception as e:
        print('系统异常,出错原因是%s'%e.__str__())
    else:
        print('不报错就执行')
    

    上述代码中,Exception是所有异常类的父类,也可以用来捕获异常,常用于程序可能会发生未知错误的情况。

    4.4 finally的使用

    try:
        input_index = int(input('请输入下标:
    '))
        num_list = [1, 2, 3, 4]
        value = num_list[input_index]
        print( '您输入后得到的值是:' + value )
    except IndexError as e:
        print('error:输入的列表下标越界')
    else:
        print('不报错就执行')
    finally:
        print('我一直执行')
    

    上述代码中,finally代表不管是否报错都需要执行它其中代码的含义。如在代码段内打开了一个文件,但有其它报错,此时finally中写上关闭文件代码。

    五、利用raise触发异常

    Python中的raise 关键字用于引发一个异常,语法格式如下:

    raise [Exception [, args [, traceback]]]
    

    语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None" ,简单使用代码如下:

    index_error = IndexError('列表下标越界')
    raise index_error
    

    上述代码是直接利用raise触发 IndexError 异常,无需系统等到列表访问下标越界时才报错。

    六、自定义异常

    • 通过创建一个新的异常类,程序可以命名它们自己的异常。
    • 异常应该是典型的继承自Exception类,通过直接或间接的方式。
    • 自定义异常使用raise语句引发,而且只能通过人工方式触发。
    #    创建一个自定义异常AgeOutOfRangeError
    class AgeOutOfRangeError(Exception):
        def __init__(self,age):
            self.age = age
        def __str__(self):
            return '年龄输入%d,超出范围值【0-150】错误'%self.age
    
    # 使用自定义异常AgeOutOfRangeError
    try:
        num = int(input('请输入年龄:
    '))
        if num<0 or num>150:
            raise AgeOutOfRangeError(num)
    except AgeOutOfRangeError as e:
        print( e.__str__() )
    except Exception as e:
        print( e.__str__() )
    

    七、小结

    • 异常处理用来处理程序中会遇到的可能的异常情况,一般异常常来自于用户误操作
    • 触发系统自带的可以称呼为系统异常处理,触发自定义异常,可以称呼为业务异常处理
  • 相关阅读:
    class11_创建新的输出字段P2
    class10_创建新的输出字段
    class09_高级过滤数据
    Markdown高级语法
    class08_过滤数据
    class07_查询数据
    class06_插入数据
    class05_操纵表
    class04_创建表02
    class03_Create a new table by SQL
  • 原文地址:https://www.cnblogs.com/dream66/p/12927497.html
Copyright © 2011-2022 走看看