错误类型
一、语法错误(Syntax errors)
-
代码编译时的错误,不符合Python语言规则的代码会停止编译并返回错误信息。
发生原因:
缺少起始符号或结尾符号(括号、引号等)
缩进错误
关键字拼写错误注:
语法错误包含在异常基类中
二、异常(Exceptions)
-
异常相较于语法错误,异常比较难发现,因为它只在代码运行时才会发生
如类型错误、数值错误、索引错误和属性错误等。发生原因:
在定义函数之前就引用该函数
调用不属于某个对象的方法或者属性
试图将某个值转换为不恰当的数据类型 -
六种典型的异常
除零错误(ZeroDivisionError):除数为0
名称错误(NameError):变量使用前未进行申明或者初始化
类型错误(TypeError):某些函数或者方法只适用于特定的数据类型,如果对数据类型的操作不当,就会产生类型错误
数值错误(ValueError):在输入类型正确的情况下,具体输入值错误
索引错误(IndexError):超出序列长度的索引操作
属性错误(AttributeError):方法或者属性不适用该对象eg: a = 10 #raw_input 键盘输入方法,可以设置提示 b = int(raw_input("请输入:")) print a/b 输出结果: #输入0,会出现除零错误
-
捕获异常
(1). 代码编写环境自带的高亮显示
便于发现常规语法错误
但难于发现异常(2). 程序要遇到异常的时候,往往是直接中断,跳出执行。
但是有些时候,我们需要在遇到异常的时候另外处理,而不是直接停止。解决方法:
try…except…语句
try关键词内执行的是正常代码,当这部分代码出错的时候,会跳过错误代码后进入except关键词内部,执行此部分的代码#语法: try: #正常运行的代码 expect: #不正常运行的代码
try…except…else语句
在try…except…后加入的else指,当程序没发生错误时执行的部分#语法: try: #正常运行 expect(Exceptions1,Exceptions2,...),e: #发生Exceptions1,Exceptions2,...时的处理方式 else: #正确时执行
finally语句
finally语句是指,无论程序运行对或错,都会执行的部分#语法: try: #正常运行 expect(Exceptions1,Exceptions2,...),e: #发生Exceptions1,Exceptions2,...时的处理方式 else: #正确时执行 finally: #无论对错都会执行
eg: try: a = 10 b = int(raw_input()) c = a/b print c except (BaseException),e: print e else: print "没有发生异常" finally: print "都会执行" 输出结果: #键盘输入1 10 没有发生异常 #键盘输入0 integer division or modulo by zero 都会执行
-
assert关键字
#语法: assert Exceptions, e
当Expression部分为True时,则正确执行,程序继续下去;当判断为False时,则抛出后面的e错误提示。
在大型的项目中,assert常被用来作为“防御性编程”eg: assert 1 == 0, BaseException #结果报错,抛出异常
-
用户自定义异常
(1). 自定义异常的原因
Python提供的内建异常不够用
可以预估某个错误的产生(2). 定义异常类继承于Exception类,由它开始扩展
eg: class MyError(Exception): pass raise MyError('something error')