首页 > 学院 > 开发设计 > 正文

第5章 错误和异常

2019-11-08 18:35:27
字体:
来源:转载
供稿:网友

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中except(ZeroDivisionError,ValueError)as e: PRint(e)

5.3.3 else语句

try:
print("I am try")except: print("I am except")else: print("I am else")I am tryI am elsetry: print(1/0)except: print("I am except")else: print("I am else")I am exceptexcept(Exception)as e: 不管什么异常都会捕获,并且传给变量e。

5.3.4 finally子句

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

5.3.5 assert语句

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