1、错误
语法错误:代码不符合解释器或者编译器语法,例如 缩进字符、循环语句的冒号
逻辑错误:不完整或不合法输入、算法问题,比如0作除数
2、异常
程序遇到逻辑或者算法问题
运行过程中计算机错误(内存不够或IO错误)
这两个或抛出异常,如果没有手动对其进行处理,那么此异常就会被解释器捕获,处理的方法
为忽略或者终止程序
3、错误和异常的区别
错误是代码运行前
错误是非正常的,不应该出现的,比如:缩进、循环语句的冒号
异常是由错误产生的
异常是代码运行时产生的 ,解释器检测到错误你并且认为是异常,抛出异常
如果不捕获处理可能会终止程序
我们可以在代码中主动捕获异常并处理
4、异常处理
4.1 try...except 语句捕获异常
try...except的工作原理:
except子句可以有多个,处理不同的特定异常,但是except最多只有一个被执行。
一个except子句处理多个异常时,将这些异常放在一个括号中形成一个元组。例如:
except(xxxError,yyyError,dddError):pass
最后一个except子句可以忽略异常名称,此时的 : 将被当做通配符使用。可以使用这种方法打印一个错误信息,然后再次把异常抛出
except:print("Unexpected error:", sys.exc_info())raise
1)首先,执行try子句,关键字try和关键字except之间的语句
2)如果没有异常发生,忽略except子句,try子句执行完后,结束
3)如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。
4)如果发生的异常类型和except之后的名称相符,那么对应的except子句就会被执行
5)如果发生的异常没有一个与except 类型相符,那么这个异常将传递给上层的try中
4.2 try...except ...else捕获处理异常
else子句可选,如果有else子句,那么必须放在所有的except子句之后。else子句将在try子句没有发生任何异常的时候执行。
4.3 try...finally 语句
语句无论是否发生异常都将执行最后的代码。
5、主动触发异常
raise语句 触发异常
触发一个错误,让程序进入异常状态
语法:
raise异常类型
raise异常对象
6、assert语句
断言语句
assert真值表达式,错误数据(通常是字符串)
当真值表达式为False时,用错误数据创建一个AssertionError类型错误,并进入异常状态
等同于 :
if真值表达式==False:
raiseAssertionError(错误数据)