• Day7 错误和异常


    一、异常

    1、异常基础

      1.为了让我们的代码在出现异常的时候,整个项目依然是可以正常运行的,所以我们引入了异常处理机制!

          2.在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!

    try:
        pass
    except Exception,ex:
        pass
    

    需求:将用户输入的两个数字相加

    while True:
        num1 = input('num1:')
        num2 = input('num2:')
        try:
            num1 = int(num1)
            num2 = int(num2)
            result = num1 + num2
        except Exception as e:
            print('出现异常,信息如下:')
            print(e)

    2、异常种类

    python中的异常种类非常多,每个异常专门用于处理某一项异常!!!

    dic = ["wupeiqi", 'alex']
    try:
        dic[10]
    except IndexError, e:
        print e
    实例:IndexError
    dic = {'k1':'v1'}
    try:
        dic['k20']
    except KeyError, e:
        print e
    实例:KeyError
    s1 = 'hello'
    try:
        int(s1)
    except ValueError, e:
        print e
    实例:ValueError

    对于上述实例,异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

    1、简单异常

    # 未捕获到异常,程序直接报错
     
    s1 = 'hello'
    try:
        int(s1)
    except IndexError,e:
        print e
    

    所以,写程序时需要考虑到try代码块中可能出现的任意异常,可以这样写:

    s1 = 'hello'
    try:
        int(s1)
    except IndexError,e:
        print e
    except KeyError,e:
        print e
    except ValueError,e:
        print e
    

    万能异常在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

    s1 = 'hello'
    try:
        int(s1)
    except Exception,e:
        print e
    

    接下来你可能要问了,既然有这个万能异常,其他异常是不是就可以忽略了!

    答:当然不是,对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。

    s1 = 'hello'
    try:
        int(s1)
    except KeyError,e:
        print '键错误'
    except IndexError,e:
        print '索引错误'
    except Exception, e:
        print '错误'
    

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

    • 首先,执行try子句(在关键字try和关键字except之间的语句)
    • 如果没有异常发生,忽略except子句,try子句执行后结束。
    • 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
    • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。

    一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

    处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

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

    2、异常其他结构

    try:
        # 主代码块
        pass
    except KeyError,e:
        # 异常时,执行该块
        pass
    else:
        # 主代码块执行完,执行该块
        pass
    finally:
        # 无论异常与否,最终执行该块
        pass
    
    import sys
    s1 = 'hello'
    try:
        int(s1)
        # sys.exit()
    except KeyError as e:
        print('键错误')
    except IndexError as e:
        print('索引错误')
    except Exception as e:
        print('错误')
    else:
        print("哈哈")
    finally:
        print("程序结束了!")
    View Code

    try except 语句还有一个可选的else子句和finally语句,finally语句要放在最后,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行!

    3、主动触发异常【raise】

    try:
        raise Exception('错误了。。。')
    except Exception,e:
        print e

    4、自定义异常

    class WupeiqiException(Exception):
     
        def __init__(self, msg):
            self.message = msg
     
        def __str__(self):
            return self.message
     
    try:
        raise WupeiqiException('我的异常')
    except WupeiqiException,e:
        print e

    注意:自定义异常要直接或者间接继承Exception异常类!

    5、断言[assert]

    assert expression [, arguments]

    注意:Python的assert是用来检查一个条件,如果它为真,就不做任何事。如果它为假,则会抛出AssertError并且包含错误信息。相当于if语句,起强调作用,一般用在测试代码中!

    # assert 条件
     
    assert 1 == 1
     
    assert 1 == 2

    1、assert语句用来确认某个条件是真的。 
    2、如果你非常确信某个条件是true,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。 
    3、当assert语句失败的时候,会引发一AssertionError

     总结:python中的异常处理机制结构如下:

    注意:else和finally不是必选的,但是finally必须出现在else之后,finally必须在整个语句的最后位置;try后面的语句如果无异常产生则执行else语句,finally后面的字句表达的是无论是否发生异常,这些代码都必须执行!

    try一般语句适合用在处理程序的异常问题!而try...finally语句一般是用在无论是否发生异常,都将需要执行后续处理(清理)的场合,无论是在通信完成或者发生网络错误时关闭网络连接,又或者在读一个文件时,无论是否有异常发生最后都要关闭文件,那就可以使用try...finally

     

      

  • 相关阅读:
    子网掩码
    一个正则表达式:该正则表达式标示了后面有数字,但又不能是某特定数字的情况
    C++:STL标准入门汇总
    SOAP
    uva10236The Fibonacci Primes
    uvalive3209City Game
    uvalive3695Distant Galaxy
    uva11549Calculator Conundrum
    uva11078Open Credit System
    uvalive3295Counting Triangles
  • 原文地址:https://www.cnblogs.com/python-machine/p/6842328.html
Copyright © 2020-2023  润新知