Python异常

概述

关键字:try, except, else, finally, raise
对应java:try,catch,不出现异常时执行,finally,throw

处理思想:符合要求,就继续。不符合要求,就引发异常。
而不是 出现了错误1,引发异常1或反馈。这样不可能穷举所有错误。

异常处理机制

try …except

try:
    pass
except (IndexError, ValueError):
    pass# 可以是输出,raise,或者执行完循环体中try前面的代码,并continue跳过本轮循环
except Exception:
#也可以直接写   
#except:
    print(其他异常)
else:
    print("没有异常")

else

示例在上面

对于一段代码A:
放else和try里的区别:代码A不会异常时都一样,A会异常时,放try会被捕获,放else不会被dtry…except捕获
放在else和后面的区别:else可以用于打印信息-------说明没有引发异常的信息

使用finally回收资源

一定会执行,除非在except块中出现:
os.exit(1)退出解释器
其他代码没用,比如:
return
sys.exit() 退出程序,通过引发异常来结束程序,所以还是会执行finally

尽量不要在finally中出现return raise
正常流程:try/except,把返回值先存着 ----fnially —把try/except返回值返回去,停止
finally里面修改值不会影响try/except

但是fianlly有return,raise,则流程:try/except,把返回值先存着 ----fnially,返回,停止
最后的值和finally的return语句有关

3、使用raise引发异常

有时候异常需要程序员来引发:
因为不符合需求就是异常,而电脑不能判断
三种用法:

  1. 单独
  2. 带一个异常类
  3. 异常对象

在try块里面raise,可以手动引发异常

try:
    if value>0:
        raise ValueError("值大于0")
        #raise #单独一个raise也可以
except:
    pass

自定义异常类

直接继承Exception就可以了,内容一般不用写
作用是异常的名字可以更好的表示出异常类型

class AuctionException(Exception):pass

except和raise同时使用

出现了异常,在except里面不能完全处理,还要向上抛出
一般不用于主方法,因为主方法没有上级了

raise不需要参数

异常传播轨迹

没用吧。略过了

异常处理规则

目标:
混乱最小
捕获诊断信息
通知合适的人员
采取适合的方式结束异常

忠告:
不要过度使用异常
不要用很大的try块
不要忽略捕获到的异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值