python3.x Day5 异常处理

异常处理:

预计可能会发生的异常,明确如果发生,如何处理,不过一般不参与业务逻辑,也不要一次性捕捉全部异常,不然可能程序就不可控了。

data={}
mmm=[]

try:                #捕获异常,
    data["name"]
    mmm[3]
except IndexError as e: #探索异常,如果是探索到的异常类型,则执行以下操作,程序整体不崩溃
    print("下标越界:",e)     #可以单个捕获
except KeyError as e:
    print("索引错误:",e)

try:
    data["name"]
    mmm[3]
except (IndexError,KeyError) as e:   #可以捕获多个
    print("索引错误,下标越界:",e)

try:
    data["name"]
    mmm[3]
except IndexError as e: #探索异常,如果是探索到的异常类型,则执行以下操作,程序整体不崩溃
    print("下标越界:",e)     #可以单个捕获
except KeyError as e:
    print("索引错误:",e)
except Exception as e:  #可以捕获全部  这种一般不去直接上来就用,因为无法定位,用在最后挺好,捕获全部未知错误。
    print("出错:",e)
else:    #这个else就是没有异常会走这里
    print("一切正常")
finally:    #不论有没有错误,都会执行这个
    print("不论有没有错误,都会执行这个")


#语法错误,缩进错误,这类导致无法编译的异常,是无法捕获的。


#自定义异常:
class WangYueException(Exception):
    def __init__(self,msg):
        self.message=msg

    # def __str__(self): #这个只是原理描述,确实在调用异常时,信息是通过__str__()方法获取的,但不用在自定义异常时写出来,父类都写好了的
    #     return self.message

try:
    print("其他代码")
    raise WangYueException("我的异常出来了。") #自定义异常是无法呗python自动触发的,因为python也不知道自己的业务逻辑,所以,需要用raise来触发异常
except WangYueException as e:
    print(e)

#不要覆盖系统默认已经有的异常类型,不然会出现无法捕获系统自带异常的捕获,虽然报错正常

 

posted @ 2017-11-30 14:49  王玥  阅读(174)  评论(0编辑  收藏  举报