Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 552|回复: 0

python的异常处理及异常类定义

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-7 15:50:34 | 显示全部楼层 |阅读模式

    python的异常处理语法和大多数语言相似:

    try:

         try块的语句...

    except exceptiontype1 as var:#使用as语句获得本次捕获到的异常的实例var

      except块语句...

    except exceptiontype2 as var:

      except块语句...

    except:

      except块语句...

    else:

      else块语句...

    finally:

      finally块语句...

    执行的流程分两类:

    1.try->若有异常发生->except->finally
    2.try->若无异常发生->else->finally

    其中try块执行了可能抛出异常的语句,except块负责处理抛出的异常,处理的尝试顺序与多个except块的编写顺序一致,当尝试发现第一个异常类型匹配的except块时就进入该块内执行该except块的语句,最后一个不指定异常类型的except:  块匹配任何类型的异常(由于所有异常都继承自Exception类所有except Exception:与不指定异常类型效果一致)。

    except块至少要有一个,可以使用pass语句如

    except:

      pass

    表示“抓到”异常后不进行任何处理。

    finally类是可选的块,如前面的流程所示,无论是否有异常抛出,只要finally块存在就会被最终执行(该块中的语句一般用于关闭打开的资源,比如在try块中打开的磁盘文件)

    此外,python中提供另一种简单的写法:with...as...方式

    with open('abc.txt', 'r') as f:

      f语句块....

    上面的f就是打开的文件对象,而采用with..as..方式会在执行完f语句块后自动关闭打开的文件资源,而不用自己写finally语句块。

    至于背后的机理,实际上面的with...as...语句在进入f语句块之前调用open对象(注意python中函数也是对象,具有__call__方法的对象都可以当函数用)

    的__enter__方法,该方法的返回值赋值给as后面的f,再在执行完f语句块后调用open对象的__exit__方法,而open对象作为python的内置对象默认的__enter__方法返回文件对象而__exit__方法刚好关闭了打开的文件资源从而使我们用起来感觉像方便版的try ,finally。

    了解了上面的内容后,下面定义我们自己的新的异常类(这在实际开发过程中非常有用):

    class myerr(Exception):
        def __init__(self,err):
            Exception.__init__(self)
            self.err=err
    try:
        raise myerr('myexception')
    except myerr as var :
        print(var.err)

    定义自己的异常类一般都继承自Exception类,初始化时同时使用Exception类的__init__方法,此外,可以通过添加一个err属性用于存放错误信息,方便在后续的异常处理中可以根据错误信息的不同来进行不同的处理。

    引发自己定义的异常的语法是raise exceptiontype(arg...),直接生成该异常类的一个实例(实例化时需要的参数自行提供)并抛出该异常

    在捕获异常时使用except exceptiontype as var的语法获取异常实例var,从而可以在后续的处理中访问该异常实例的属性。

    如上面代码的输出为:

    myexception

     
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 07:49 , Processed in 0.063345 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表