python异常处理&异常基类学习
一、内置异常基类汇总
转载自:https://www.cnblogs.com/nmb-musen/p/10856023.html
BaseException 所有异常的基类 +-- SystemExit 解释器请求退出 +-- KeyboardInterrupt 用户中断执行(通常是输入^C) +-- GeneratorExit 生成器(generator)发生异常来通知退出 +-- Exception 常规错误的基类 +-- StopIteration 迭代器没有更多值 +-- StopAsyncIteration 必须通过异步迭代器对象的__anext__()方法引发以停止迭代 +-- ArithmeticError 所有数值计算错误的基类 | +-- FloatingPointError 浮点计算错误 | +-- OverflowError 数值运算超出最大限制 | +-- ZeroDivisionError 除(或取模)零 (所有数据类型 +-- AssertionError 断言语句失败 +-- AttributeError 对象没有这个属性 +-- BufferError 与缓冲区相关的操作时引发 +-- EOFError 没有内建输入,到达EOF 标记 +-- ImportError 导入失败 | +-- ModuleNotFoundError 找不到模块 +-- LookupError 无效数据查询的基类 | +-- IndexError 序列中没有此索引(index) | +-- KeyError 映射中没有这个键 +-- MemoryError 内存溢出错误 +-- NameError 未声明、初始化对象 | +-- UnboundLocalError 访问未初始化的本地变量 +-- OSError 操作系统错误, | +-- BlockingIOError 操作将阻塞对象设置为非阻塞操作 | +-- ChildProcessError 子进程上的操作失败 | +-- ConnectionError 与连接相关的异常的基类 | | +-- BrokenPipeError 在已关闭写入的套接字上写入 | | +-- ConnectionAbortedError 连接尝试被对等方中止 | | +-- ConnectionRefusedError 连接尝试被对等方拒绝 | | +-- ConnectionResetError 连接由对等方重置 | +-- FileExistsError 创建已存在的文件或目录 | +-- FileNotFoundError 请求不存在的文件或目录 | +-- InterruptedError 系统调用被输入信号中断 | +-- IsADirectoryError 在目录上请求文件操作 | +-- NotADirectoryError 在不是目录的事物上请求目录操作 | +-- PermissionError 在没有访问权限的情况下运行操作 | +-- ProcessLookupError 进程不存在 | +-- TimeoutError 系统函数在系统级别超时 +-- ReferenceError 弱引用试图访问已经垃圾回收了的对象 +-- RuntimeError 一般的运行时错误 | +-- NotImplementedError 尚未实现的方法 | +-- RecursionError 解释器检测到超出最大递归深度 +-- SyntaxError Python 语法错误 | +-- IndentationError 缩进错误 | +-- TabError Tab 和空格混用 +-- SystemError 一般的解释器系统错误 +-- TypeError 对类型无效的操作 +-- ValueError 传入无效的参数 | +-- UnicodeError Unicode 相关的错误 | +-- UnicodeDecodeError Unicode 解码时的错误 | +-- UnicodeEncodeError Unicode 编码时错误 | +-- UnicodeTranslateError Unicode 转换时错误 +-- Warning 警告的基类 +-- DeprecationWarning 关于被弃用的特征的警告 +-- PendingDeprecationWarning 关于构造将来语义会有改变的警告 +-- RuntimeWarning 可疑的运行行为的警告 +-- SyntaxWarning 可疑的语法的警告 +-- UserWarning 用户代码生成的警告 +-- FutureWarning 有关已弃用功能的警告的基类 +-- ImportWarning 模块导入时可能出错的警告的基类 +-- UnicodeWarning 与Unicode相关的警告的基类 +-- BytesWarning bytes和bytearray相关的警告的基类 +-- ResourceWarning 与资源使用相关的警告的基类。。
二、常见异常
三、异常捕获
1.异常和捕获
- try:监测有可能出现异常的代码
- except:捕获异常,对异常进行处理
- else:没有发送异常的处理方式,放在else中
- finally:不管代码是否发生异常都会执行
2.使用方法:
try:
try下面是有可能出现异常的代码
except:
except下面放捕获异常之后处理的代码
else:
else代码放没有发现异常,会执行else代码
finally:
finally:不管代码是否发生异常都会执行
3.应用
3.1.打开文件时,文件有可能不存在
try:
with open("yyt.txt", "r", encoding="utf8") as f:
content=f.read()
except:
print("捕获到异常之后的处理方式")
with open("yyt.txt", "w", encoding="utf8") as f:
pass
else:
print("代码没有出现异常处理的方式,可以写内容")
print(content)
finally:
print("无论代码是否出现异常都会执行")
print("--------1--------")
3.2用户输入的数据没办法控制,有可能出现异常
try:
num=int(input("请输入数字"))
except:
print("输入不符合规则,请输入正常的数据")
else:
if num>8:
print("数字大于8")
四、指定捕获异常类型
如果要捕获多个异常类型:
方式一:使用多个except,每个except都可以指定捕获的异常类型,适合不同类型的异常作不同的处理
方式二:使用一个except捕获多个类型的异常,适用多个类型的异常采用相同的处理方式
except (NameError,FileNotFoundError,KeyError) as e:
方式三:捕获所有的异常类型:(语法错误除外),像一些第三方模块中自定义的异常,就可以使用该方式进行捕获
例子:
方法2例子
try:
print(a)
except Exception as e:
print("捕获到了异常")
方法1例子
ry:
print(a)
f=open()
except (NameError,FileNotFoundError,KeyError) as e:
print("代码异常")
print("异常信息:", e)
except NameError as e:
print("代码异常")
print("异常信息:",e)
except FileNotFoundError as e:
print("代码异常")
print("异常信息:", e)
else:
print("无异常")
finally:
print("代码是否有异常均会执行")
五、实战一波
1.实现一个文件复制器函数
通过给函数传入一个路径,复制该路径下面所有的文件(目录不用复制)到当前目录,
要求:如果传路径不存在,不能报错 提示:os模块结合文件读写操作 、异常捕获 即可实现
import os
try:
file_name="users.txt"
with open(file_name,"r",encoding="utf8") as f:
content = f.read()
except:
print("传入的路径不正确")
else:
s=os.listdir(r"D:\python\test")
print(s)
for i in s:
print(i)
m=os.path.join("D:\\python\\test",i)
print(m)
with open(m,"w",encoding="utf8") as a:
content="1111"
a.write(content)