异常

作者: Daydreamer_ | 来源:发表于2017-07-12 21:12 被阅读0次

    异常就是程序运行错误或者逻辑混乱。需要给客户友好的提示。异常一般是程序中无法完全避免,一般通过一定的手段,尽量减少异常的发生。

    当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"

    1.捕获异常

    1.1 try...except...

    try:

        可能出现异常的代码

    except:

        对异常信息做出的解释

    #记录异常信息

    except后不写任何类,表示捕捉任何异常。当出现异常,其实解析器会被这种异常分析,实例化得到一个异常对象 xx。然后再与except里的异常类进行匹配,如果能匹配,as将异常对象赋给ex

    ·把可能出现问题的代码,放在try中

    ·把处理异常的代码,放在except中

    如:

    path = input('输入文件的路径:')print('1......')

    content = None

    try:

        print('2......')

        content = open(path,'r',encoding='utf-8').read()

        a = 10/0

        print('3......')

    except (FileNotFoundError,NameError,ZeroDivisionError) as ex:

        print('4......')

        print('输入的路径不存在')

        print(ex)

    print('5......')

    print(content)

    如果输入错误路径,运行结果如下:

    输入文件的路径:sd

    1......

    2......

    4......

    输入的路径不存在

    [Errno 2] No such file or directory: 'sd'

    5......

    None

    1.2 except捕获多个异常

    开发的时候建议,捕捉异常要写的更详细。

    但是一般直接用Exception。简单省事。

    如果需要写很多异常类的描述,按照从小到大的顺序。

    因为有一个捕捉到了异常。不会再被捕捉了。

    注意:

    ·当捕获多个异常时,可以把要捕获的异常的名字,放到except后,并使用元组的方式仅进行存储

    try:

    num = 10/0

    except Exception as ex:

    print('2......')

    except FileNotFoundError as ex:

    print('0......')

    except ZeroDivisionError as ex:

    print('1......')

    运行结果:

    2......

    try:

    num = 10/0

    except FileNotFoundError as ex:

    print('0......')

    except ZeroDivisionError as ex:

    print('1......')

    except Exception as ex:

    print('2......')

    运行结果:

    1......

    1.3 else

    我们对else并不陌生,在if中,它的作用是当条件不满足时执行的实行;同样在try...except...中也是如此,即如果没有捕获到异常,那么就执行else中的事情

    1.4 try...finally...

    try:

    pass

    finally:

    pass

    try...finally...语句用来表达这样的情况:

    在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。比如文件关闭,释放锁,把数据库连接返还给连接池等

    2异常的传递

    2.1 try嵌套

    import time

    try:

    #f = open('test.txt')

    f = open(r'C:\Users\Administrator\Desktop\xx.txt')

    try:

    while True:

    content = f.readline()

    if len(content) == 0:

    break

    num=1/0 #模拟一个异常

    #time.sleep(2)

    print(content)

    #except:

    #print('except...')

    finally:

    f.close()

    print('关闭文件')

    except:

    print('没有这个文件')

    运行结果:

    没有这个文件

    2.2 函数嵌套调用

    ·如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。。。

    ·如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样

    def test1():

    print("----test1-1----")

    try:

    print(num)

    except:

    print('test1  except......')

    print("----test1-2----")

    def test2():

    print("----test2-1----")

    test1()

    print("----test2-2----")

    def test3():

    try:

    print("----test3-1----")

    test1()

    print("----test3-2----")

    except Exception as result:

    print("捕获到了异常,信息是:%s"%result)

    print("----test3-2----")

    test3()

    print("------华丽的分割线-----")

    test2()

    结果:

    ----test3-1----

    ----test1-1----

    test1  except......

    ----test1-2----

    ----test3-2----

    ----test3-2----

    ------华丽的分割线-----

    ----test2-1----

    ----test1-1----

    test1  except......

    ----test1-2----

    ----test2-2----

    相关文章

      网友评论

          本文标题:异常

          本文链接:https://www.haomeiwen.com/subject/crhihxtx.html