第5章 错误和异常

5.1错误

    Python中常见错误之一是语法错误(syntax errors)。
    常见错误之二是在没有语法错误时,会出现逻辑错误。
    当python检测到一个错误时,解释器就无法继续执行下去,于是抛出相应的信息,这些信息我们统称为异常信息。

5.2异常

常见的异常:
异常 描述
NameError 尝试访问一个没有声明的变量
ZeroDivisionError 除数为0
SyntaxError 语法错误
IndexError 索引超出序列范围
KeyError 请求一个不存在的字典关键字
IOError 输入/输出错误(比如你要读的文件不存在)
AttributeError 尝试访问未知的对象属性

5.3 处理异常

为了让程序健壮,有时需要处理异常。
为使程序不因为错误而停止,需要程序中“异常处理”设置,如果没有“异常处理”,则当异常出现时就会导致程序中止。

5.3.1 try...except...

如果没有异常发生,except子句在try语句执行之后被忽略;如果try子句中有异常发生,该部分的其他语句被忽略,直接跳到except部分,执行其后面指定的异常类型及其子句。
except后面也可以没有任何异常类型,及无异常参数。如果这样, 不论try部分发生什么异常,都会执行except
eval(): 将字符串str当成有效的表达式来求值并返回计算结果。
raise :作为单独一个语句,它的含义是将异常信息抛出。

5.3.2 处理多个异常

处理过个异常并不是因为同时报出多个异常,程序在运行中,只要遇到一个异常就会有反应。所谓处理多个异常的意思是可以容许捕获不同的异常,由不同的except子句处理。
如果有多个except,try里面遇到一个异常,就转到相应的except子句,其他的忽略。如果except没有相应的异常,该异常也会抛出,不过这时程序就要中止了,因为异常“浮出”程序顶部。
除了用多个except之外,还可以在一个except后面放多个异常参数。 注意:多个参数一定要用圆括号包裹起来。
如果希望打印出默认错误但程序不能中断:python3中
   
   
  1. except(ZeroDivisionError,ValueError)as e:
  2. print(e)

5.3.3 else语句

    
    
  1. try:
  2. print("I am try")
  3. except:
  4. print("I am except")
  5. else:
  6. print("I am else")
  7. I am try
  8. I am else
  9. try:
  10. print(1/0)
  11. except:
  12. print("I am except")
  13. else:
  14. print("I am else")
  15. I am except
except(Exception)as e: 不管什么异常都会捕获,并且传给变量e。

5.3.4 finally子句

有了finally,不管前面执行的是try,还是except,最终都要执行finally。因此,有一种说法是将finally用在可能的异常后进行清理。

5.3.5 assert语句

   
   
  1. >>> assert 1==1
  2. >>> assett 1==0
  3. File "<stdin>", line 1
  4. assett 1==0
  5. ^
  6. SyntaxError: invalid syntax
assert,翻译过来就是“断言”之意。assert是语句等价于布尔真的判定,发生异常就意味着表达式为假。
应用情境就和意思一样,当程序运行到某个节点的时候,就断定某个变量的值是什么,或者对象必然拥有某个属性等,简单说就是断定什么东西必然是什么,如果不是,就抛出错误。
如果没有特别的目的,断言应该用于如下情况:
  • 防御性的编程。
  • 运行时对程序逻辑的检测。
  • 合约性检查(比如前置条件,后置条件)。
  • 程序中的常量。
  • 检查文档。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值