异常处理

一、什么是异常

异常是错误发生的信号,一旦程序出错就会产生一个异常
如果该异常没有被处理,该异常就会抛出来,程序的运行随即终止
异常是由三部分组成
1、具体哪一行代码抛出的异常

2、异常的种类

  NameError:变量名没有定义
  IndexError:索引不存在
             l = [11,22]
             l[100]
KeyError
             d = {"k1":11}
             d["k2]
AttributeError:对象属性不存在
            对.属性
ValueError
           int"asdf")
TypeError
         "asdf"+1111
ZeroDivisionError
            1/0

3、异常的内容消息

二、为何有异常

为了增强程序的健壮性

三、如何处理异常

1、针对语法的错误:应该在程序运行前立即改正
2、针对逻辑错误

(1) 如果逻辑错误发生的条件可以预知的,应该if判断解决,预防异常。

 age = input('>>: ').strip()
    if age.isdigit():
        age = int(age)
        if age > 18:
            print("too big")
        elif age < 18:
            print("to small")
        else:
            print("got it")
    else:
        print("必须输入数字"

(2) 如果逻辑错误发生的条件是不可预知的,那么一个异常会发生,考虑到程序的健壮性那么应该处理异常,做好补救措施
用到

 try:
       代码块
except 异常类型(如:NameError,KeyError):
            发生异常后要执行代码
# 例一
# try:
#     print("=======>111")
#     print("=======>222")
#     xxx
#     print("======>3333")
# except AttributeError as e:     
# 异常类型错误NameError: name 'xxx' is not defined
#     print(e)
#
# print('======>4')
# 例二
# try:
#     print("=====>111")
#     print("======>222")
#     xxx
#     print("=====>3333")   #找错下一行不运行
# except NameError as e:
#     print(e)
#
# print("=====>4")
# 结果:
# =====>111
# ======>222
# name 'xxx' is not defined
# =====>4
# 例三:
# try:
#     print("======>111")
#     print("=======222")
    # xxx       # =------> name 'xxx' is not defined
    # l=[]
    # l[0]      # =-----> list index out of range
    # dic={}
    # dic["k1"]  # 'k1'
    # print("======>333")
    
# except NameError as e:
#     print("=------>",e)
# except IndexError as e:
#     print("=----->",e)

# except (NameError,IndexError)as e:
#     print(e)

# except KeyError as e:
#     print(e)
# print("=======>4")
# 例四:
# try:
#     print("=======>111")
#     print("=====>222")
#     xxx = 111
#     # l = []
#     # l=[0]
#     # dic = {}
#     # dic["k1"]
#     print("======>333")
# except(NameError,IndexError)as e:
#     print("=------>",e)
# except KeyError as e:
#     print(e)
# finally:   #  无论异常与否,都会执行该模块,通常是进行清理工作
#	 print("一定会运行")
# print("=====》4")
# print(xxx)   # 111
# 例五:
# try:
#     print("====111")
#     print("====222")
    # xxx
    # l=[]
    # l[0]
    # dic = {}
    # dic["k1"]
#     print("=====333")
# except Exception as e:     # Exception万能异常
#     print(e)
# print("====444")
# 例六:
# print('====11')
# raise NameError("变量名未定义")       # raise 自定义错误
# print("=====222")

# class Animal:
#     def speak(self):
#         raise BaseException("小垃圾必须实现speak方法来覆盖")
#     def run(self):
#         raise BaseException("小垃圾必须实现run方法来覆盖")
# class Dog(Animal):
#     pass
# class Pig(Animal):
#     pass
# d = Dog()
# p = Pig()
#
# d.speak()
# d.run()
#
# p.speak()
# d.run()

# 结果:
# raise BaseException("小垃圾必须实现speak方法来覆盖")
# BaseException: 小垃圾必须实现speak方法来覆盖
# 例七:
# class Interface(BaseException):
#     def __init__(self,msg,x,y,z):
#         self.msg = msg
#         self.x = x
#         self.y = y
#         self.z = z
#     def __str__(self):
#         return "<%s:%s:%s:%s>"%(self,self.msg,self.x,self.y,self.z)
#
# raise Interface("接口异常",11,22,33)
# 例八:
print("=====111")
print("====2")
print(("====3"))
salaries = [1.1,2.2,1]

# if len(salaries) !=3:
#     raise NameError
assert  len(salaries) == 3    #  断言:assert 条件 当条件成立时,则运行下方代码,反之不运行
# print(salaries[2])
# print(salaries[2])
print(1111111)
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])


print(("====3"))
salaries = [1.1,2.2]

# if len(salaries) !=3:
#     raise NameError
assert  len(salaries) == 3    #  断言:assert 条件 当条件成立时,则运行下方代码,反之不运行
# print(salaries[2])
# print(salaries[2])
print(1111111)
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值