异常:在程序运行过程中影响程序正常运行的内容, 称为异常
一 常见的异常
NameError:命名错误
print(a)
IndexError: 索引错误
li = [1,2,3,4]
print(li[8])
KeyError
d = dict(a=1, b=2)
print(d['f'])
ZeroDivisionError: 除0错误
print(10/(2-2))
AttributeError: 对象没有该属性
class Student(object):
def __init__(self, name, age):
self.name = name
# self.age = age
# def echo(self):
# print(self.name, self.age)
# s1 = Student("westos", 10)
# print(s1.scores)
FileNotFoundError
with open('/tmp/passwd9') as f:
print(f.read(5))
二 try-except语句
try:
f=open('hello.txt','w')
f.write('这是一个测试文件')
#注意:except语句不一定会执行,只有try语句出现IOError报错才会执行
except IOError as e:
print(e)
#print('没有找到文件或者文件读取失败')
#如果没有捕获到异常,执行else语句
else:
print('文件写入成功')
#无论是否捕获到异常,都执行的语句
finally:
f.close()
print('文件已经关闭')
捕获多个异常
except可以处理一个专门的异常,也可以处理一组异常,用元组表示,如果except后没有指定异常,则默认处理所有的异常
三 抛出异常
raise: 关键字, 用来抛出异常.
raise 抛出异常的名称, 抛出异常的详细显示
def get_age(age):
if 0<age<=200:
print(age)
else:
#如果raise抛出异常,程序后面的代码不会执行
raise Exception('invaild age')
get_age(20)
get_age(1000)
自定义异常类
说明:所有的异常实际上是一个类,所以异常的父类都是BaseException.
NameError,IOError, IndexError, KeyError, FileExistsError
四 assert断言
断言是一句必须等价于布尔真的判定;发生异常意味着表达式为假
以上说明了100确实不是回文数,所以出现异常