欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 之 面向对象 (异常处理)

程序员文章站 2022-03-07 09:25:01
7.15 异常处理 1、什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2、一个异常分为三部分: 异常的追踪信息 异常的类型 异常的值 3、异常的分类: 语法异常,逻辑上的异常 语法: 7.151 try.... ......

7.15 异常处理

1、什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出来,程序的运行也随之终止

2、一个异常分为三部分: 异常的追踪信息 异常的类型 异常的值

3、异常的分类: 语法异常,逻辑上的异常

语法:

单分支
try:
     print('start.....')
     x=1
     y
     l=[]
     l[3]
     d={'a':1}
     d['b']
     print('end....')
 except nameerror:
     print('变量名没有定义')
print('other.....')         #start..... 变量名没有定义 other.....
多分支
try:
    print('start.....')
    x=1
    # y
    l=[]
    l[3]
    d={'a':1}
    d['b']
    print('end....')
except nameerror:
    print('变量名没有定义')
except keyerror:
    print('字典的key不存在')
except indexerror:
    print('索引超出列表的范围')
print('other.....')     # start.....  索引超出列表的范围 other.....
多种异常采用同一段逻辑处理
try:
    print('start.....')
    x=1
    # y
    l=[]
    # l[3]
    d={'a':1}
    d['b']
    print('end....')
except (nameerror,keyerror,indexerror):
    print('变量名或者字典的key或者列表的索引有问题')
print('other.....') #start.....  变量名或者字典的key或者列表的索引有问题  other....
万能异常
try:
    print('start.....')
    x=1
    # y
    l=[]
    # l[3]
    d={'a':1}
    # d['b']
    import os
    os.aaa
    print('end....')
except exception:
    print('万能异常---》')
print('other.....') #start..... 万能异常---》other.....
获取异常的值
try:
    print('start.....')
    x=1
    y
    l=[]
    l[3]
    d={'a':1}
    d['b']
    import os
    os.aaa
    print('end....')
except exception as e:
    print('万能异常---》',e)
print('other.....')#start.....  万能异常---》 name 'y' is not defined  other.....

7.151 try....else...

else: 不能单独使用,必须与except连用,意思是:else的子代码块会在被检测的代码没有出现过任何异常的情况下执行

try:
    print('start.....')
    # x=1
    # # y
    print('end....')
except nameerror as e:
    print('nameerror: ',e)
except keyerror as e:
    print('keyerror: ',e)
except exception as e:
    print('万能异常---》',e)
else:
    print('在被检测的代码块没有出现任何异常的情况下执行')
print('other.....')#start.....  end....  在被检测的代码块没有出现任何异常的情况下执行 other.....

7.152 try...finally....

try:
    print('start.....')
    # x=1
    # # y
    print('end....')
except exception as e:
    print('万能异常---》',e)
finally:
    print('无论有没有异常发生,都会执行')
print('other.....')#结果:start..... end.... 无论有没有异常发生,都会执行 other.....
#如果检测到异常:start..... 
#万能异常---》  name 'y' is not defined 
#无论有没有异常发生,都会执行 other.....

finally的子代码块中通常放回收系统资源的代码

try:
    f=open('a.txt',mode='w',encoding='utf-8')
    f.readline()
finally:
    f.close()
print('other....') #报错 但文件关闭  (other....不执行)

7.153 主动触发异常

class people:
    def __init__(self,name):
        if not isinstance(name,str):
            raise typeerror('%s 必须是str类型' %name)
        self.name=name
​
p=people(123)       # typeerror: 123 必须是str类型

断言

stus=[]
assert len(stus) > 0
print('part2.........')
print('part2.........') #assertionerror

自定义异常

class registererror(baseexception):
    def __init__(self,msg,user):
        self.msg=msg
        self.user=user
​
    def __str__(self):
        return '<%s:%s>' %(self.user,self.msg)
​
raise registererror('注册失败','teacher')   #__main__.registererror: <teacher:注册失败>