异常
异常本身是类的实例
一、异常
>>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
>>> a === 2 File "<stdin>", line 1 a === 2 ^ SyntaxError: invalid syntax
>>> a() Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
二、Python的异常结构 (基于继承)
在 Python 中所有的异常都是继承自 BaseException 直接分为四大类:
1、SystemExit:Python退出异常
2、KeyboardInterrupt: 键盘打断(Ctrl+C)
3、GeneratorExit: 生成器退出(下次课再讲)
4、Exception: 普通异常(只会使用这部分的异常)
三、错误回溯
异常处理
1、基本的 try … except …
2、捕获具体的异常捕获多种异常
3、关于 Exception 及其 子类 的解释
4、更加丰富的结构
代码中会出现的异常都是 Exception 的子类, 因此在 except 中只需要在最后加上 Exception 即可
在捕获异常的过程中,会从上倒下依次对比异常,找到之后就不会再往后查找
try: print("-------------1------------") #有可能出错的代码 print(c) print("------------2-------------") except NameError as info: #在这里用as 将捕获到的异常 用一个变量保存 print("捕获到了异常,会执行我下面的代码对异常进行处理") print(info) #把捕获的信息返回出去 else: print("没有捕获到异常执行我") finally: print("不管有没有异常都会执行我") # 注意事项: # 1. try 下面放可能出错的代码 # 2. except try下面的代码出错后,会执行except下面的代码 # 3. else try下面代码没有错误,执行else下面的代码 # 4. finally 不管try下面的代码有没有出错,始终都会执行 -------------1------------ 捕获到了异常,会执行我下面的代码对异常进行处理 name 'c' is not defined 不管有没有异常都会执行我
5、扩展(自定义异常类型)
class MyError(Exception): #自定义异常必须继承于Exception pass raise MyError try: raise NameError #主动抛出异常 except NameError: print("报错了") #raise 主动抛出异常 # 格式:raise 异常类型 # 注意:raise 是主动抛出后面写的异常类型
断言 assert
assert 1 == 1 #条件成立往下运行 条件不成立报错 print("======================") # 断言语句是将调试断言插入程序的一种便捷方式 # assert 的语法规则是: # 表达式返回 True 不报错 # 表达式返回 False 报错 报 AssertionError #断言错误