Python异常总结

在Python或者C#开发中对于异常一般采用try—except,try—catch来捕获异常,然后发现对于异常类型不熟悉,和不自定义异常越来越不方便所以重新翻看基础后坐下记录。

1.raise语句

用于触发异常,通常碰到就头疼,类似于Throw。
这里写图片描述
注意最后一行,只表明了错误类型是异常的基类型并没有相关的错误信息,一般都会附加信息,一般后期的查错和修复,所以可以增加:

raise Exception('information of this exception')

这样红字中就会出现信息”information of this exception”,尽管看到红字就烦。
再一个简单的例子,除数不能为0:

def chufa(a,b):
    if b==0:
        raise ZeroDivisionError('plase check the second param')
    else:
        return a/b

一些常见的内建异常:

Exception                           #异常基类型
AttributeError                      #特性引用或者赋值失败
IOError                             #意图打开不存在的文件
IndexError                          #使用序列中不存在的索引
KeyError                            #使用映射中不存在的键
NameError                           #找不到名字\变量
SyntaxError                         #代码错误
TypeError                           #引用的类型
ValueError                          #对对象使用不正确的值
ZeroDivisionError                   #0作为除数

自定义异常:

class yourexception(Exception):
    pass

当然你甚至可以为你的异常类型添加方法,尽管不知道有啥意义。

2.异常捕捉

Python中使用Try—–except来捕获异常

def(a,b):
    try:
        return a/b
    except Exception as e:
        print(e)

如果b等于0那么该函数调用时就会打印异常信息,except Exception会捕获所有的异常,如果只想捕获某一种异常比如这里只想要捕获过0异常就将Exception改成ZeroDivisionError就可以。

存在屏蔽的异常触发:

class Calculator:
    muffled=True
    def calc(self,expr):
        try:
            return eval(expr)
        except ZeroDivisionError:
            if self.muffled:
                print('illegal zero')
            else:
                raise

触发异常后悔根据自身的变量muffled是否出发该异常。

捕捉多个异常:

try:
    #your code
except (ZeroDivisionError,TypeError,ValueError) as e:
    print(e)
    #how to deal

要是什么异常都捕捉那就except Exception as e就可以了e就是异常对象,可以根据不同的异常采取不同的操作

3.finally

如同其意,最后的操作,这个的好处就在于无论触发异常或者没有触发异常都会执行finally。
最常见的应用情景就是线程锁和进程锁,就算进程或线程执行过程中出现异常,也必须释放锁,否则整个程序就会被锁死在这里了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值