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) #不要覆盖系统默认已经有的异常类型,不然会出现无法捕获系统自带异常的捕获,虽然报错正常