首页 > 其他 > 详细

14 异常

时间:2018-05-31 00:01:19      阅读:275      评论:0      收藏:0      [点我收藏+]

第15节 异常

作业解答

# 根据课堂上给出的上下文管理器,判断IO操作和文件操作那个速度快
?
from datetime import datetime
import io
?
class RunTime(object):
    def __enter__(self):
        self.start_time = datetime.now()
        print(self.start_time)
        return self.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(今天天气真好)
?
with RunTime() as a:
    with open(duqusucai.py, r) as file:
        print(file.read())
?
with RunTime() as b:
        print(sio.getvalue())
?
?
# 运行结果:
2018-04-18 02:58:20.221762
今天天气真好
2018-04-18 02:58:20.228967
运行时间为: 0:00:00.007205
2018-04-18 02:58:20.229365
今天天气真好
2018-04-18 02:58:20.229521
运行时间为: 0:00:00.000156

 


一,认识异常

  • Python的异常结构

python中所有的异常都是继承自BaseException,分为四大类:

类型描述
SystemExit python退出异常
Keyboardlnterrupt 键盘打断(ctrl + c)
GeneratorExit 生成器退出
Exception 普通异常

二,异常处理

例1:基本的try...except...
try:   # 首先写一个try,然后把所有可能出错的代码放进去,try后面必须赶上except
    print(------1------)      # 第一条正确
    print(a)                    # 第二条错误
    print(------3-------)     # 第三条正确
?
except:         # 写上一个except
    pass        # 下面是写 捕获到异常的处理方案
?
运行结果:
------1------

例2:捕获具体的异常
try:   # 首先写一个try,然后把所有可能出错的代码放进去
    print(------1------)      # 第一条正确
    print(a)                    # 第二条错误
    print(------3-------)     # 第三条正确
?
except NameError as info:       # 写上一个except 捕获异常类型
    print(捕获到异常代码,下面是异常代码:)
    print(info)
?
运行结果:
------1------
捕获到异常代码,下面是异常代码:
name a is not defined

例3:捕获多种异常
# 写法一:可以写多个except
try:
    pass
except TabError:
    pass
except NameError:
    pass
# 写法二:在except后面用括号把多种异常类型给括起来
try:
    pass
except(NameError,TabError):
    pass
# 不确定的异常类型
try:
    pass
except Exception:
    pass
    

例4:更加丰富的结构
try:   # 首先写一个try,然后把所有可能出错的代码放进去
    print(------1------)      # 第一条正确
    print(a)                    # 第二条错误
    print(------3-------)     # 第三条正确
?
except Exception as result:     # 在这里用 as 将捕获到的异常 用这个变量保存起来
    print(捕获到异常,会执行我下面的代码对异常进行处理)
    print(result)
?
else:
    print(没有捕获到异常,执行我)
?
finally:
    print(不管有没有异常,我都会执行)
    
运行结果:
------1------
捕获到异常,会执行我下面的代码对异常进行处理
name a is not defined
不管有没有异常,我都会执行
?
注意事项:
1. try       下面放可能出错的代码
2. except try下面的代码出错后,会执行except下面的代码
3. else     try下面代码没有错误,执行else下面的代码
4. finally 不管try下面的代码有没有出错,始终都会执行

例5:自定义异常类型
class MyError(Exception):       # 自定义的异常必须继承 Exception
    pass
?
raise MyError           # 主动抛出 自定义异常
?
运行结果:
Traceback (most recent call last):
  File "/home/pyvip/pycharm/23班作业/异常.py", line 37, in <module>
    raise MyError           # 主动抛出 自定义异常
__main__.MyError
raise   主动抛出异常
格式:raise 异常类型
注意:raise 是主动抛出后面写的异常类型

三,断言(类似raise)

if not False:
    raise Exception(条件不满足)
?
等效于:
?
assert True  # 不抛出异常
assert False # 抛出异常
def myfunc(num):
    assert type(num) == int:
        raise TypeError(不是数字)
    return num * 10
?
print(myfunc(hello))
?
# 若传入不为int会报错,反之则会正常运行

四,自行定义异常类型 (控制类型)

class NameMustBeLuckError(Exception):
    pass
?
?
def myfunc(name):
    if name != luck:
        raise NameMustBeLuckError(The name must be luck!)
?
try:
    print(myfunc(juhao))
except Exception as a:
    print(a)
    
# 运行结果:
The name must be luck!

 

14 异常

原文:https://www.cnblogs.com/zcmq/p/9114150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!