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子句都会执行
    

      

    本文为原创文章,转载请标明出处
  • 相关阅读:
    C#计算一段程序运行时间的三种方法
    jquery easyui combobox设置默认选中第一项
    ASP.NET Web API教程 分页查询
    ASP.NET Web Api 实现数据的分页
    开源.net 混淆器ConfuserEx介绍
    C#软件license管理(简单软件注册机制)
    MyBatis入门实例-包括实体类与数据库字段对应&CLOB字段处理
    MyBatis在insert插入操作时返回主键ID的配置
    MyBatis框架——mybatis插入数据返回主键(mysql、oracle)
    关于java中split的使用
  • 原文地址:https://www.cnblogs.com/harden13/p/9061510.html
Copyright © 2011-2022 走看看