zoukankan      html  css  js  c++  java
  • Python之异常处理

    1.程序在异常抛出的地方中断执行,如果不捕获,就会提前结束程序
    raise语句
    raise后什么都没有,表示抛出最近一个被激活的异常,如果没有被激活的异常,则抛类型异常
    raise后要求应该是BaseException类的子类或者实例,如果是类,将被无参实例化
    

    BaseException是所有内建异常类的基类

    #sys.exit()函数引发的异常,如果异常不捕获处理,就直接交给python解释器,解释器直接退出
    import sys
    try:
        sys.exit(1)
    except SystemExit:
        print('exit')
    print('outer')
    

    Exception及其子类

    exception是所有内建的,非系统退出的异常的基类,自定义异常应该继承自它
    SyntaxError语法错误,Python将这种错误也归到异常类下面的exception子类,但是这种错误是不可捕获的
    

    ArithmeticError

    所有算数计算引发的异常,其子类有除零异常等
    

    LookupError

    使用映射的键或者序列的缩影无效是引发的异常的基类:IndexError,KeyError

    自定义异常

    从exception继承得类  
    捕获原则,从小到大,从具体到宽泛,捕获不到就向外抛出异常,如果被一个exception语句捕获,其他的就不会在捕获异常了  

    as子句

    被抛出的异常应该是异常的实例,使用as子句去获得这个对象
    
    class Myexception(Exception):
        def __init__(self,code,message):
            self.code = code
            self.message = message
    
    try:
        raise Myexception('400','error')
    except Myexception as e:
        print('{}-->{}'.format(e.code,e.message))

    finally子句

    finally最终,即最后一定会执行的,try。。。finally语句中不管是否发生了异常都要执行finally
    
    open函数打开文件失败就不会赋值给f ,如果不给f=None 判断f 还会抛出error
    f = None
    try:
        f = open('abcdefg')
    except Exception as e:
        print('{}'.format(e))
    finally:
        print("clean workstation")
        if f:
            f.close()
        # f.close()

    try的工作原理

    1.如果try中语句执行时发生异常,搜索except子句,并执行第一个匹配该异常的except子句
    2.如果try中语句执行发生异常,却没有匹配的except子句,异常将被递交到外层try,还不处理,继续抛出,还不处理终止异常所在的线程
    3.如果在try执行时没有发生异常,将会执行else子句中的语句
    4.无论try中是否发生异常,finally子句都会执行
    

      

    本文为原创文章,转载请标明出处
  • 相关阅读:
    Hashcode的作用
    java 强弱软虚 四种引用,以及用到的场景
    Object类有哪些公用方法?
    equals和==的区别
    switch能否用string做参数
    Java九种基本数据类型,以及他们的封装类
    Singleton(Java)
    快速排序和二分查找(Javascript)
    快速排序和二分查找(Go)
    ubuntn 安装 MySQL
  • 原文地址:https://www.cnblogs.com/harden13/p/9061510.html
Copyright © 2011-2022 走看看