异常处理

"""
1、什么是异常
    异常是错误发生的信号,一旦程序出错就会产生一个异常
    如果该异常没有被处理,该异常就会被抛出来,程序的运行随即终止

如图:

img

异常常用种类

AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
异常是由三部分组成
  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、异常的内容信息

2、为何要处理异常
    为了增强程序的健壮性

3、如何处理异常
    1、针对语法的错误:应该在程序运行前立即改正
    2、针对逻辑错误:
        2.1 如果逻辑错误发生的条件是可以预知的,应该if判断解决,预防异常
            age = input('>>: ').strip()
            if age.isdigit():
                age=int(age)
                if age > 18:
                    print('too big')
                elif age < 18:
                    print('too small')
                else:
                    print("got it")
            else:
                print('必须输入数字')
        2.2 如果逻辑错误发生的条件是不可预知的,那么异常一个会发生,考虑到程序的健壮性
            我们应该处理异常,做好补救措施
            try:
                代码块
            except 异常的类型:
                发生异常后要执行的代码

"""

# 例1

# try:

#     print("====>111")

#     print("====>222")

#     xxx

#     print("====>333")

# except AttributeError as e:

#     print(e)

#

# print('====>4')

# 例2

# try:

#     print("====>111")

#     print("====>222")

#     xxx

#     print("====>333")

# except NameError as e:

#     print(e)

#

# print('====>4')

# # 例3

# try:

#     print("====>111")

#     print("====>222")

#     # xxx

#     # l=[]

#     # l[0]

#     dic={}

#     dic["k1"]

#     print("====>333")

# except (NameError,IndexError) as e:

#     print("=---->",e)

# except KeyError as e:

#     print(e)

#

# print('====>4')

# # 例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)


# # 例4

# try:

#     print("====>111")

#     print("====>222")

# finally:

#     print("一定会运行")

# print('====>4')

# # print(xxx)

# # 例5

# try:

#     print("====>111")

#     print("====>222")

#     # xxx

#     l=[]

#     # l[0]

#     dic={}

#     dic["k1"]

#     print("====>333")

# except Exception as e:

#     print("万能异常",e)

# print('====>4')

# 例6

# print('==>11')

# raise NameError("变量名未定义")

# 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()

# 例7

# 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.msg,self.x,self.y,self.z)

#
#

# raise Interface("接口异常", 11, 22, 33)

# 例8:

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

# if len(salaries) != 3:

#     raise NameError

assert len(salaries) == 3

print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
posted @ 2020-08-16 11:11  Οo白麒麟оΟ  阅读(259)  评论(0编辑  收藏  举报