一.什么是异常
异常是指运行程序时发生错误的信号。 (如果程序发生错误,则会发生异常;如果程序未处理该异常,则会抛出该异常,程序也将终止运行。 )在python上,发生错误的异常如下所示。
1、错误类型
语法错误:这一错误,经不起python解释器的语法检测,必须在程序运行前纠正
#语法错误示范一if#语法错误示范二
def test:
传球
#语法错误演示三类函数
传球
#语法错误演示4
打印(helloword
视图代码
逻辑错误
#TypeError:int型不可重复for i in 3:
传球
#值错误
键入num=input(: ) ) Helloint
#NameError
aaa
#索引错误
l=['aa ',' bb']
l[3]
#密钥错误
dic={'name': '感动的朋友' }
dic['age']
# attributeerrorclassfoo 3360 pass
Foo.x
#ZeroDivisionError:无法完成计算
res1=1/0res2=1 'str '
视图代码
2、异常种类
常用异常
AttributeError试图访问不在对象中的树,如foo.x,但foo没有属性x
IOError输入输出异常; 基本上不能打开文件
ImportError无法部署模块或软件包; 基本上是路径问题或名字错了
IndentationError语法错误(的子类); 代码未正确对齐
索引错误下标的索引超出了序列边界。 例如,x中只有3个要素却试图访问x[5]
KeyError试图访问词典中不存在的密钥
keyboard中断ctrl c已按下
NameError使用未分配给对象的变量
SyntaxError Python代码不正确,代码无法编译(我个人认为这是语法错误,写错了)。
TypeError接收对象类型和要求不匹配
UnboundLocalError之所以尝试访问尚未设置的局部变量,基本上是因为还有另一个同名的全局变量。
我以为你在访问那个
即使值类型正确,ValueError也会传递调用方不期望的值
视图代码
更多异常
ArithmeticError
评估错误
属性错误
基本执行
缓冲器错误
字节警告
复制警告
环境错误
Eof错误
执行
浮动点
财富警告
发生器退出
ImportError
导入警告
索引错误
索引错误
IO错误
keyboard中断
密钥错误
Lookup错误
内存错误
名称错误
NotImplementedError
操作系统错误
溢出错误
PendingDeprecationWarning
参考错误
运行时错误
运行时间警告
标准错误
停止迭代
syntax错误
同步警告
系统错误
系统退出
tab错误
类型错误
Un
boundLocalErrorUnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionErro
View Code
二、异常处理
1、如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防
num=10
whileTrue:
age=input('>>:').strip()ifage.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
age=int(age)if age ==num:
print('666')break
View Code
2、如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理
#基本语法为try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
#举例try:
f=open('a.txt')
g=(line.strip() for line inf)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
except StopIteration:
f.close()
View Code
3、try...except类型
①单分支:异常类只能用来处理指定的异常情况,如果非指定异常则无法处理
s1 = 'hello'
try:int(s1)
except IndexErrorase: # 未捕获到异常,程序直接报错
print e
View Code
②多分支:如果你对错误原因需要进行不同分流或者程序处理
s1 = 'hello'
try:int(s1)
except IndexErrorase:
print(e)
except KeyErrorase:
print(e)
except ValueErrorase:
print(e
View Code
③万能异常Exception:如果对错误原因不关心,只是想不让其报错,那么程序中你就用万能处理
s1 = 'hello'
try:int(s1)
except Exceptionase:
print(e)
View Code
④多分支异常与万能异常:对某些错误需要进行分流处理,剩下的错误直接跳过
s1 = 'hello'
try:int(s1)
except IndexErrorase:
print(e)
except KeyErrorase:
print(e)
except ValueErrorase:
print(e)
except Exceptionase:
print(e)
View Code
⑤其它异常:如果出现异常 就不会走else逻辑,不出现异常,则执行else逻辑
try:
print('二狗 向 脸哥转了 200元')
name
print('脸哥确认收到了 200元')
except NameError:
print('name is not defined')else:
print('转账成功')
print(666)
View Code
⑥try except else finally:无论报不报错都执行,如果报错,finally是在报错之前执行的!!!
try:
print('二狗 向 脸哥转了 200元')
name
print('脸哥确认收到了 200元')
except KeyError:
print('name is not defined')
#
#else:
# print('转账成功')
#finally:
print(666)
View Code
⑦主动抛出异常
try:
raise TypeError('类型错误')
except Exceptionase:
print(e)
View Code
⑧自定义异常
classPhoneConnectionError(BaseException):
passtry:
raise PhoneConnectionError('类型错误')
except PhoneConnectionError:
print('手机连接出现问题')
View Code
⑨断言:assert 条件
assert 1 == 1assert1 == 2
View Code
三、什么时候用异常处理
1、首先try...except是附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的,这种东西加的多了,会导致你的代码可读性变差
2、只有在错误发生的条件无法预知的情况下,才应该加上try...except
3、有的同学会这么想,学完了异常处理后,好强大,我要为我的每一段程序都加上try...except,坚决不允许……