异常处理

一:什么是异常?

    异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下


    而错误类型分为两种,一种是语法错误,一种是逻辑错误:

    语法的错误在文件执行前读取代码时,就会检测语法,如果有语法错误,文件内的代码不会执行,就会直接崩溃


    而逻辑错误,在语法的检测阶段,并不会报错,当代码执行到错误的地方时,才会触发错误,程序会发出错误信号,如果没有机制对错误进行处理,那么就会抛出异常,程序也就终止了


二:常见异常种类

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它

ValueError 传入一个调用者不期望的值,即使值的类型是正确的

三:异常处理

为了保证程序的健壮性与容错性性,即在遇到错误时不会崩溃,我们需要对异常进行处理

3.1可预知条件下的异常处理


上面的代码是做数学运算,如果输入的不是数字,那么只算就会出现异常,要保证输入的是数字,那么就能避免异常,这种可预知的异常条件,可以用上面的方法来避免

3.2不可预知条件下的异常处理

在这种情况下,我们需要用到try....except:在错误发生进行处理,做好相应的应对机制


上面的代码,并不能准确的预知到文件内的数据上面时候被迭代取完,发生错误的条件不可预知,但是对于错误类型可以预见,于是在错误发生后,截获异常类型,执行f.close()通知操作系统回收资源

异常类只能处理指定的异常情况,如果非指定异常则无法处理


异常处理可以多分枝进行,同时监测三种异常


但是有的时候我们需要统一处理一切的异常,这是后就需要万能异常了


将多分枝异常与万能异常结合起来用,间距两者的优点,既可以处理一切异常,也可以按照指定要求处理特定的异常

3.3异常的其他结构

try....else

try....finally


主动触发异常


自定义异常


断言assert条件

打断程序的方式,相比于主动抛出异常来说,断言,代码结构更加简洁,不会破坏原代码结构的只管感受,代码量也相对较少

总结

1、把错误处理和真正的工作分开来

2、代码更易组织,结构更清晰,复杂的工作任务更容易实现

3、程序变得更加健壮,不易崩溃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值