异常处理

异常是错误发生前的一种信号,如果没有人来处理这个信号,就会中断执行并且抛出错误信息。

异常分为语法检查异常和运行时异常:

语法检查异常是最低级的异常 在编译器里自动提示 在文本编辑器时当你运行代码解释器就会检查语法    绝对不能犯语法检查异常的错误

运行时异常是我们处理的重点,通常在代码运行时才会被发现,在运行时发生异常并且没有正确处理,就会抛出错误信息 并中断程序执行

我们学习异常处理是为了让我们的程序更加稳定,保证健壮性

常见的异常:
NameError 找不到这个名字 变量或者函数 ValueError 在调用一个函数时给的值不正确 TypeError 类型错误 ZeroDivisionError 除数不能为0 KeyError 没有这个key IndexError 索引不存在 StopIteration 没有更多的值可以迭代 FileNotFoundError 文件不存在 io.UnsupportedOperation 文件的操作不支持 AttributeError 没有这个属性 KeyboardInterrupt 程序被强行终止
异常处理写法:
多异常类型处理
try:
    name
    [][1]
    1/0
except NameError:
    print('name')
except IndexError:
    print('list')
except ZeroDivisionError:
    print('zero')

===>
name 

强调:一旦try 中有代码抛出了异常 后面的代码全都不执行


多异常类型处理2
try:
    name
    [][1]
    1/0
except (NameError,IndexError,ZeroDivisionError):
    print('name,list,zero')

万能异常类型 Exception 或者 BaseException  基于面向对象的继承与多态

try:
    name
    [][1]
    1/0
except Exception:
    print('name,list,zero')

不常用的语法

 

try:
    name

except Exception:
    print('name')
else:
    print('代码正确')#try中没有发生异常时运行
finally:
    print('===>')#不管有没有发生异常都会运行

 

在下面的代码必须依赖上面代码的正确数据时可以使用断言

name = 'xia'
assert name == 'egon' #代码错误时可以抛出一个AssertionError 来表表示断言失败
print(name)

 

自定义异常类型

主动抛出异常:
Class =input('请输入班级名')
if Class == 'python':
    print('yes')
else:
    raise ValueError('你输入的班级名不对')

自定义异常:
class CusError(BaseException):
    def __init__(self,name):
        self.name =name

def func():
    ls = input('y/n:')
    if ls == 'y':
        print('正确')
    else:
        raise CusError('xia')# 主动抛出异常
try:
    func()
except CusError as e:#使用e来获取异常对象
    print(e.name)
例子

 

 

posted @ 2018-11-01 20:50  Summerdreamcold  阅读(118)  评论(0编辑  收藏  举报