面向对象 10 异常处理&try...except用法

什么是异常处理:异常是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那个就会抛出异常,并i企鹅程序的允许随之终止

print('1')
print('2')
print('3')
int('aaaaa')
print('4')
print('5')
print('6')

错误分两种
1 语法错误
程序执行前就要立刻改正过来

print('xxx')
if 1>2

2逻辑错误

ValueError:
int(‘aaa')

NameError
name

TypeError


.........

3 异常
强调一:对于错误发生的条件是可以预知的,此时应该用if判断去预防异常

AGE=10
age = input('>>:').strip()

if age.isdigit():
    age=int(age)
    age=int(age)
    if age >AGE:
       print("太大了")

强调二:如果错误发生的条件是不可预知的,此时应该用异常处理机制,try…except

try:
    f=open('a.txt','r',encoding='utf-8')
    print(next(f),end='')
    print(next(f),end='')
    print(next(f),end='')
    print(next(f),end='')
    print(next(f),end='')
    print(next(f),end='')
    f.close()
except StopIteration:
    print('出错')

print('>>>>>>>>>11')
print('>>>>>>>>>>22')
print('>>>>>>>>>##3')

多分支:被监测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑


try:
    print('====>1')
    # name
    print('=====>2')
    l=[1,2,3]
    # l[100]
    print('=====>3')
    d={}
    d['name']
    print('==>4')

except NameError as e:
    print('=====>',e)

except IndexError as e:
    print('=====>',e)

except KeyError as e:
    print('=====>',e)

万能异常:Exception 被监测的代码块抛出的异常可能有多种可能性,并且我们针对所有的异常类型都只用一种逻辑就可以了,那就要Exception

try:
    print('====>1')
    # name
    print('=====>2')
    l=[1,2,3]
    # l[100]
    print('=====>3')
    d={}
    d['name']
    print('==>4')

except Exception as e:
    print('异常发生',e)

print('========>after code')
try:
    print('====>1')
    # name
    print('=====>2')
    l=[1,2,3]
    # l[100]
    print('=====>3')
    d={}
    d['name']
    print('==>4')

except NameError as e:
    print('=====>',e)

except IndexError as e:
    print('=====>',e)

except KeyError as e:
    print('=====>',e)

except Exception as e:
    print('统一处理方法')
print('========>after code')

其他


try:
    print('====>1')
    # name
    print('=====>2')
    l=[1,2,3]
    # l[100]
    print('=====>3')
    d={}
    d['name']
    print('==>4')

except NameError as e:
    print('=====>',e)

except IndexError as e:
    print('=====>',e)



except Exception as e:
    print('统一处理方法')

else:
    print('在被检测的代码块没有发生异常是执行')
finally:
    print('不管被检测的代码块有无发生异常都会执行')
print('========>after code')


try:
    f=open('a.txt','r',encoding='utf-8')
    print(next(f))
    print(next(f))
    print(next(f))
    print(next(f))
    print(next(f))
    print(next(f))
finally:
    f.close()

主动触发异常:raise 异常类型(值)

class People:
    def __init__(self,name,age):
        if isinstance(name,str):
            raise TypeError('名字必须转入str类型')
        if not isinstance(age,str):
            raise TypeError('年龄必须传入int类型')
        self.name=name
        self.age=age
p=People('efon',18)

自定义异常


class MyException(BaseException):
    def __init__(self,msg):
        super(MyException,self).__init__()
        self.msg=msg
    def __str__(self):
        return '<%s>'%self.msg
raise MyException('我自己的异常类型') #print obj

断言assert

info={}
info['name']='egon'
# info['age']=18

if 'name' not in info:
    raise KeyError('必须有name这个key')
if 'age' not in info:
    raise KeyError('必须有age这个key')
# if info['name'] == 'egon' and info['age']>18:
#     print('welcome')

assert ('name' in info) and ('age' in info)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值