异常处理
"""
1、什么是异常
异常是错误发生的信号,一旦程序出错就会产生一个异常
如果该异常没有被处理,该异常就会被抛出来,程序的运行随即终止
如图:
异常常用种类
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
异常是由三部分组成
1、具体哪一行代码抛出的异常
2、异常的种类
NameError:变量名没有定义过
IndexError:索引不存在
l=[11,22]
l[100]
KeyError
d={"k1":11}
d["k2"]
AttributeError:对象属性不存在
对象.属性
ValueError:
int("asdf")
TypeError:
"asdf"+1111
ZeroDivisionError
1/0
3、异常的内容信息
2、为何要处理异常
为了增强程序的健壮性
3、如何处理异常
1、针对语法的错误:应该在程序运行前立即改正
2、针对逻辑错误:
2.1 如果逻辑错误发生的条件是可以预知的,应该if判断解决,预防异常
age = input('>>: ').strip()
if age.isdigit():
age=int(age)
if age > 18:
print('too big')
elif age < 18:
print('too small')
else:
print("got it")
else:
print('必须输入数字')
2.2 如果逻辑错误发生的条件是不可预知的,那么异常一个会发生,考虑到程序的健壮性
我们应该处理异常,做好补救措施
try:
代码块
except 异常的类型:
发生异常后要执行的代码
"""
# 例1
# try:
# print("====>111")
# print("====>222")
# xxx
# print("====>333")
# except AttributeError as e:
# print(e)
#
# print('====>4')
# 例2
# try:
# print("====>111")
# print("====>222")
# xxx
# print("====>333")
# except NameError as e:
# print(e)
#
# print('====>4')
# # 例3
# try:
# print("====>111")
# print("====>222")
# # xxx
# # l=[]
# # l[0]
# dic={}
# dic["k1"]
# print("====>333")
# except (NameError,IndexError) as e:
# print("=---->",e)
# except KeyError as e:
# print(e)
#
# print('====>4')
# # 例4
# try:
# print("====>111")
# print("====>222")
# xxx=111
# # l=[]
# # l[0]
# dic={}
# # dic["k1"]
# print("====>333")
# except (NameError,IndexError) as e:
# print("=---->",e)
# except KeyError as e:
# print(e)
# finally:
# print("一定会运行")
# print('====>4')
# # print(xxx)
# # 例4
# try:
# print("====>111")
# print("====>222")
# finally:
# print("一定会运行")
# print('====>4')
# # print(xxx)
# # 例5
# try:
# print("====>111")
# print("====>222")
# # xxx
# l=[]
# # l[0]
# dic={}
# dic["k1"]
# print("====>333")
# except Exception as e:
# print("万能异常",e)
# print('====>4')
# 例6
# print('==>11')
# raise NameError("变量名未定义")
# print('==>222')
# class Animal:
# def speak(self):