python---try except 异常捕获的方法、断言的使用

一、异常处理流程图

在这里插入图片描述

二、常见的异常列表

异常名称描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零(所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
LookupError无效数据查询的基类
IndexError序列中没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python解释器不是致命的)
NameError未声明/初始化对象(没有属性)
ReferenceError弱引用(Weakreference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython语法错误
IndentationError缩进错误
TabErrorTab和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode相关的错误
UnicodeDecodeErrorUnicode解码时的错误
UnicodeEncodeErrorUnicode编码时错误
UnicodeTranslateErrorUnicode转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtimebehavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

三、异常处理

1、处理单个异常

代码1:
在这里插入图片描述

结果:
正确输入–>
在这里插入图片描述
错误输入—>
在这里插入图片描述

代码2:
在这里插入图片描述

结果:
在这里插入图片描述

2、处理多个异常
(1)写多个except,语法如如下:

try:
    code
except Error1 as e:  #处理Error1异常
    print(e)
except Error2 as e:   #处理Error2异常
    print(e)

代码:
在这里插入图片描述

结果:
在这里插入图片描述

(2)写1个except,语法如下:

try:
    code
except (Error1,Error2,...) as e:
    print(e)

代码:
在这里插入图片描述

结果:
在这里插入图片描述

注:第二种写法的用处:括号里面的所有错误,不管出现里面任何一种错误都用统一的处理方法。
3、Exception异常

语法如下:

try:
    code
except (Error1,Error2,...) as e:
    print(e)
except Exception as e:   #用Exception表示一下子抓住所有异常,这个一般情况下建议在异常最后面用,用在最后抓未知的异常
    print(e)

代码:

在这里插入图片描述
结果:

在这里插入图片描述

4、else作用
作用:没有异常,则走else部分的逻辑代码
语法如下:

try:
    code
except (Error1,Error2,...) as e:
    print(e)
except Exception as e:
    print(e)
else:             #没有异常出错,走else的逻辑代码
    print("没有异常")

代码:

在这里插入图片描述

结果:
try语句执行时出现异常,不执行else语句:
在这里插入图片描述

try正确执行时,else语句被执行:
在这里插入图片描述

5、finnally作用
作用:不管有没有错误,都会执行finnally中的代码

语法如下:

try:
    code
except (Error1,Error2,...) as e:
    print(e)
except Exception as e:
    print(e)
else:
    print("没有错误,执行")
finnally:
    print("不管有没有错,都执行finnally")

代码:

在这里插入图片描述

结果:
没有异常情况:
在这里插入图片描述

出现异常情况:
在这里插入图片描述

6、自定义异常

class GaoError(Exception):  #定义一个异常类,继承Exception
  
    def __init__(self,message):
        self.message = message
  
    def __str__(self):
        return self.message #给对象取一个名

触发自定义异常:

try:
    raise GaoError("数据库连接不上了")  #触发自定义异常,GaoError("数据库连接不上了")这个对象
except GaoError as e:
    print(e)

自定义使用总结:

数据库连接不上的信息
权限问题,解析是没有权限了,给出异常提示
业务逻辑的错误

7、断言

断言被用作你接下来的程序执行,如果后面程序依赖于前面的程序,后面的程序有很重要,就是后面的程序执行肯定不能出错,所以在执行之前要做检查工作。
代码:

在这里插入图片描述

结果:
在这里插入图片描述

代码:

在这里插入图片描述

结果:
在这里插入图片描述


版权声明:本文为weixin_45784367原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。