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入门到精通教程
查看: 540|回复: 0

python 异常知识点

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-3 10:34:51 | 显示全部楼层 |阅读模式

    raise from

    python 在3.0 之后引入了raise from 表达式:

    raise exception from otherexception

    当使用该语法时,第二个表达式指定了另一个异常类或实例,它会附加到引发异常的__cause__属性

    注意:

    python3.0不再支持raise Exc,Args形式,而该形式在Python2.6中仍然可用,在Python3.0中,使用 raise Exc(Args)调用。

    with  as

    with语句格式:

    with expression [as variable]:
        with-block

    variable是expression执行后返回的对象引用。

    with as 作用是先执行启动程序,然后执行代码块,执行终止程序代码,无论该代码块是否引发异常。

    例如:

    myfile  =  open(r'C:\misc\data')
    
    try:
        for line in myfile:
              print(line)
    finally:
          myfile.close

    可以使用:

    with open(r'C;\misc\data') as myfile:
         for line in myfile:
               print(line)

    自定义环境管理协议

    就是自定义可以接入with语句的对象。

    with语句实际工作方式:

    1、计算表达式,所得到的对象称为环境管理器,它必须有__enter__和__exit__方法。

    2、环境管理器的__enter方法被调用,如果as语句存在,则返回值会被赋值给as子句中的变量

    3、代码块中嵌套代码会被执行。

    4、如果with引发异常,__exit__(type, value, traceback)方法会被调用,如果此方法返回值为假,则异常会被重新触发,否则,异常会被终止。正常情况下,应该重新触发异常,这样的话才能传递到with语句之外。

    5、如果with代码块没有引发异常,__exit__方法依然会被调用,其type、value、traceback都会以None传递。

    例:

    class TraceBlock:
        def message(self, arg):
            print('running',arg)
        
        def __enter__(self):
            print('starting with block')
            return self
        
        def __exit__(self, exc_type, exc_value, exc_th):
            if exc_type is None:
                print('exited normally\n')
            else:
                print('raise an exception!', exc_type)
                return False
            
    with TraceBlock() as action:
        action.message('test 1')
        print('reached')
        
    with TraceBlock() as action:
        action.message('test2')
        raise TypeError
        print('not reached')

    执行结果:

    starting with block
    ('running', 'test 1')
    reached
    exited normally
    
    starting with block
    ('ruTraceback (most recent call last):
      File "D:\workspace\aptana\pythonTest\test\com\cy\cyg\TraceBlock.py", line 27, in <module>
        raise TypeError
    TypeError
    nning', 'test2')
    ('raise an exception!', <type 'exceptions.TypeError'>)
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 13:18 , Processed in 0.069692 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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