黑马程序员技术交流社区

标题: 【上海校区】python----异常的传递 [打印本页]

作者: 梦缠绕的时候    时间: 2019-1-15 10:17
标题: 【上海校区】python----异常的传递
"""

异常的传递--try嵌套中

"""

import time



try:

    f = open('test.txt')

    try:

        while True:

            content = f.readline()

            if len(content) == 0:

                break

            time.sleep(2)

            print(content)

    finally:

        f.close()

        print('关闭⽂件')

except:

    print("没有这个⽂件")

"""

没有这个⽂件

"""

"""

函数嵌套调⽤中

"""





def test1():

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

    print(2 / 0)

    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()

"""

捕获到了异常,信息是:division by zero

----test3-2----

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

  File "C:/File/2-workspace/python/python-base/com/day11/Demo09_except_transfer.py", line 32, in test2

----test2-1----

----test1-1----

    test1()

  File "C:/File/2-workspace/python/python-base/com/day11/Demo09_except_transfer.py", line 28, in test1

    print(2/0)

ZeroDivisionError: division by zero

"""

"""

总结:

如果try嵌套,那么如果⾥⾯的try没有捕获到这个异常,那么外⾯的try会

接收到这个异常,然后进⾏处理,如果外边的try依然没有捕获到,那么

再进⾏传递。。。

如果⼀个异常是在⼀个函数中产⽣的,例如函数A---->函数B---->函数C,

⽽异常是在函数C中产⽣的,那么如果函数C中没有对这个异常进⾏处

理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按

照函数B的处理⽅式进⾏执⾏;如果函数B也没有异常处理,那么这个异

常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时

就会进⾏异常的默认处理,即通常⻅到的那样

注意观察上图中,当调⽤test3函数时,在test1函数内部产⽣了异常,此

异常被传递到test3函数中完成了异常处理,⽽当异常处理完后,并没有

返回到函数test1中进⾏执⾏,⽽是在函数test3中继续执⾏

"""



作者: 不二晨    时间: 2019-1-16 09:02
奈斯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2