第15节 异常
第15节 异常作业解答一,认识异常二,异常处理三,断言(类似raise)四,自行定义异常类型 (控制类型)作业解答
# 根据课堂上给出的上下文管理器,判断IO操作和文件操作那个速度快
fromdatetimeimportdatetime
importio
classRunTime(object):
def__enter__(self):
self.start_time=datetime.now()
print(self.start_time)
returnself.start_time
def__exit__(self,exc_type,exc_val,exc_tb):
self.end_time=datetime.now()
print(self.end_time)
print('运行时间为: %s'%(self.end_time-self.start_time))
sio=io.StringIO()
sio.write('今天天气真好')
withRunTime()asa:
withopen('duqusucai.py','r')asfile:
print(file.read())
withRunTime()asb:
print(sio.getvalue())
# 运行结果:
2018-4-182:58:20.221762
今天天气真好
2018-4-182:58:20.228967
运行时间为:::00.007205
2018-4-182:58:20.229365
今天天气真好
2018-4-182:58:20.229521
运行时间为:::00.000156
一,认识异常
Python的异常结构
二,异常处理
例 1
try:
withopen('meiyouzhegewenjian.txt','r')asf:
f.read()
except:# except错误用法
print('没有找到该文件')
# 当try中的代码出现异常时,运行except. 若没错就运行try,except后可捕捉指定种类错误(例:except FilNotFoundError)
例 2
try:
raiseTypeError('这是一个类型错误')
exceptExceptionasa:# except正确用法
print(a)
# raise 为主动抛出异常
例 3 (控制类型)
defmyfunc(num):
iftype(num)!=int:
raiseTypeError('不是数字')
returnnum*10
print(myfunc('hello'))
# 若传入不为int会报错,反之则会正常运行
例 4
defmyfunc(num):
iftype(num)!=int:
raiseTypeError('不是数字')
returnnum*10
try:
print(myfunc('hello'))
exceptTypeError:
print('类型错误')
else:
print('没有错误')
finally:
print('不管怎样,finally都会执行')
# 运行结果:
类型错误
不管怎样,finally都会执行
例 5 (当不确定有没有这个属性时)
dic= {'name':'a','age':18}
try:
print(dic['age'])
exceptKeyError:
print('字典里没有这个值')
# 运行结果:
18
# 若查找值不存在会报错,反之则会正常运行
三,断言(类似raise)
ifnotFalse:
raiseException('条件不满足')
等效于:
assertTrue# 不抛出异常
assertFalse# 抛出异常
例
defmyfunc(num):
asserttype(num) ==int:
raiseTypeError('不是数字')
returnnum*10
print(myfunc('hello'))
# 若传入不为int会报错,反之则会正常运行
四,自行定义异常类型 (控制类型)
classNameMustBeLuckError(Exception):
pass
defmyfunc(name):
ifname!='luck':
raiseNameMustBeLuckError('The name must be luck!')
try:
print(myfunc('juhao'))
exceptExceptionasa:
print(a)
# 运行结果:
Thenamemustbeluck!
领取专属 10元无门槛券
私享最新 技术干货