python快速学习系列(8):异常处理

-异常通常出现的处理方式
·条件语句:if/else
·异常处理:try/except/else/finally

1.python中的异常和相关语法
·exception:python内置的异常类
·raise:抛出异常
·try:尝试运行以下语句
·except:在try语句之后,捕获某个异常,为空则捕获全部异常(很危险难以debug)
·else:在try语句之后,如果没有捕获到异常,则执行
·finally:在try语句之后,无论是否捕获到异常,均执行
1)

try:     #尝试执行下面的语句
    print("enter try")
except:  #出现异常就捕获,这里是捕获全部异常(可以在except后面空格加具体异常)
    print("enter except")
else:    #没有出现异常则执行
    print("enter else")
finally:
    print("enter finally")
#以上,except和else只执行其一,finally永远最后执行

2)

try:     #尝试执行下面的语句
    print("enter try")
    1 / 0
except ZeroDivisionError:  
    print("enter except ZeroDivisionError")
except ArithmeticError:
    print("enter except ArithmeticError")
except:
    print("enter except")
else:    #没有出现异常则执行
    print("enter else")
finally:
    print("enter finally")

3)

MODE = 'DEBUG'
try:
    print('enter try')
    1 / 0
except Exception as e:
    print("enter except")
    if MODE == 'DEBUG':
        raise      #抛出异常,而且是执行完finally之后才抛出异常,因为一旦抛出异常程序就会中断
    elif MODE == 'WARN':
        print(e)   #仅仅打印提示信息,不抛出异常。而且是先打印提示信息,再执行finally(因为程序不会中断)
else:
    print("enter else")
finally:
    print("enter finally")

2.异常的传播

def f1():
    try:
        return 1 / 0
    except Exception as e:
        print("This is f1.")
        print(e)
        raise

def f2():
    try:
        f1()
    except Exception as e:
        print("This is f2.")
        print(e)

def f3():
    try:
        f2()
    except Exception as e:
        print("This is f3.")
        print(e)

def main():
    try:
        f3()
    except Exception as e:
        print("This is main")
        print(e)

if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        print("this is __main__")
        print(e)

以上代码输出结果:
This is f1
division by zero
This is f2.
division by zero

原因是:f1虽然捕获了异常,但是将其抛出了,抛出的异常又被f2给捕获了,而f2并未抛出,所以在之后都检测不到
如果所以函数都加上raise的话,但最后的__main__不加上,则所有函数都会打印相应的结果
如果连最后的__main__都加上raise的话,则直接traceback了,凉凉

猜你喜欢

转载自blog.csdn.net/shanlepu6038/article/details/84671548