异常
广义上的错误分为错误和异常
错误指的是可以人为避免
异常是指在语法逻辑正确的前提下,出现问题
在python里,异常是一个类,可以处理和使用
#异常的分类
- BaseException # 所有异常的父类
- SystemExit # 由sys.exit()抛出的异常
- KeyBoardInterrupt # 通常由ctrl+c或者Delete抛出的异常
- GeneratorExit # 当生成器被关闭时抛出的异常
- Exception #
- StopIteration # 迭代结束异常
- StopAsyncIteration # 由异步迭代的
__anext__()
抛出的异常 - ArithmeticError # 各种算数错误引起的异常
- FloatingPointError # 浮点数操作错误
- OverflowError # 结果超出范围
- ZeroDivisionError # 0为除数异常
- AssertionError # assert错误异常
- AttributeError # 属性引用异常
- BufferError # 缓存错误
- EOFError # 读不到数据
- ImportError # import错误
- ModuleNotFoundError # 找不多模块
- LookupError # 由索引和key值引起的异常
- IndexError # 索引错误
- KeyError # 字典key值错误
- MemortError # 内存溢出异常
- NameError # 本地和全局找不到变量名
- UnboundLocalError # 局部变量没有赋值
- OSError # system错误
- BlockingIOError # 调用阻塞异常错误
- ChildProcessError # 子进程
- ConnectionError # 连接
- BrokenPipeError # 管道读写异常
- ConnectionAbortedError # 连接失败
- ConnectionRefusedError # 连接拒绝
- ConnectionResetError # 连接重置
- FileExistsError # 创建文件和文件夹错误
- FileNotFoundError # 文件未找到
- InterruptedError # 中断错误
- IsADirectoryError # 文件操作用在文件夹上
- NotADirectoryError # 不是文件夹
- PermissionError # 权限
- ProcessLookupError # 进程不存在
- TimeoutError # 超时
- ReferenceError # 引用异常
- RuntimeError #
- NotImplementedError # 运行抽象方法
- RecursionError # 超出最大递归深度
- SyntaxError # 语法错误
- IndentationError # 缩进错误
- TabError # tab错误
- IndentationError # 缩进错误
- SystemError # 解释器中断
- TypeError # 类型错误
- ValueError # 赋值错误
- UnicodeError #
- UnicodeEncodeError # unicode编码错误
- UnicodeDecodeError # unicode解码错误
- UnicodeTranslateError # unicode转换错误
- UnicodeError #
- Warning #
- DeprecationWarning # 操作不赞成警告
- PendingDeprecationWarning # 表明此操作将来会被弃用
- UserWarning # 用于用户生成警告
- SyntaxWarning # 语法可疑警告
- RuntimeWarning # 运行警告
- FutureWarning # 将会改变警告
- ImportWarning # 导入警告
- UnicodeWarning # unicode相关警告
- BytesWarning # 字节相关警告
- ResourceWarning # 资源使用情况警告
异常处理
不能保证程序永远正确运行
但是,必须保证程序在最坏的情况下得到的问题被妥善处理
python的异常处理模块全部语法为:
try:
尝试实现某个操作,
如果没出现异常,任务就可以完成
如果出现异常,将异常从当前代码块扔出去尝试解决异常
except 异常类型1:
解决方案1:用于尝试在此处处理异常解决问题
except 异常类型2:
解决方案2:用于尝试在此处处理异常解决问题
except (异常类型1,异常类型2....)
解决方案:针对多个异常使用相同的处理方式
except :
解决方案:所有异常的解决方案
else:
如果没有出现任何异常,将会执行此处代码
finally:
管你有没有异常都要执行的代码
- 流程
1.执行try下面的语句
2.如果出现异常,则在except语句里查找对应异常病进行处理
3.如果没有出现异常,则执行else语句内容
4.最后,不管是否出现异常,则都要执行finally语句 - 除except(最少一个)以外,else和fianlly可选(可以没有)
- 用于尝试在此处处理异常解决问题
用户手动引发异常
-当某些情况下,用户希望自己引发一个异常的时候,可以使用raise关键字来引发异常
-注意raise使用语法,raise后面跟ErrorClassName
#关于自定义的异常
-只要是raise异常,则推荐自定义异常
-在自定义异常的时候,一般包含以下内容:
-自定义发生异常的异常代码
-自定义发生异常后的问题提示
-自定义发生异常的行数
-最终的目的是,一旦发生异常,方便程序员快速定位错误现场