从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]

从0基础学习Python (Day19)

面向对象开发过程中的=>异常

什么是异常

​ 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的提示,这就是异常(错误代码或者BUG)

程序出现异常的后果

​ 程序在运行过程中出现了异常

​ 轻则功能无法实现,或者功能运行结果出错

​ 重则整个程序崩溃!!!!!

捕获异常

​ 捕获异常是在编程中常用的一种处理代码中可能会出现漏洞的一些基础解决方案

捕获异常的方法

使用try—except语法

try#可能会出现异常的代码
except#如果try里面的哪行代码出现异常会直接跳到这里面执行代码

​ ·这种捕获异常存在一个问题,只会捕获异常然后执行except中的处理代码,但是无法得知异常的问题

捕获指定异常

例:

print(a)
#执行会抛异常
#SyntaxError: invalid character in identifier
#在“:”之前叫异常类,之后叫异常信息

语法

try:
	#可能会出现异常的代码
except 可能出现的异常类型:
    #如果捕获到异常是指定的这个类型的执行代码

​ 在使用捕获指定异常的时候一定要考虑所有有可能出现的异常类型,如果出现的异常不在所写出的“可能出现的异常类”之中,则会报错

注意

  1. 如果执行的代码的异常类型和要捕获的异常类型不一致则无法捕获异常
  2. 一般try下面只放一行尝试的代码

捕获多个指定异常

​ 当在捕获异常的时候,可以把要捕获的异常类型的名字,放到except之后,并使用元祖的方式进行体现,或者采用多个except之后放上不同的异常类型的名字

异常类

​ 异常类是指在Python内置的一些类,这些类代表了Python中的一些异常问题

异常名称 描述
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
SystemExit Python 解释器请求退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
KeyboardInterrupt 用户中断执行(通常是输入^C)
LookupError 无效数据查询的基类
IndexError 序列中没有没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

捕获异常描述信息

语法

try:
    #可能会出现异常的代码
except (指定的异常类型1,指定的异常类型2,...) as 变量:
    print(变量)

​ 将捕获的区域中的代码出现的指定的异常问题的描述信息存放在变量中,然后输出

捕获所有异常

​ 所有异常类的父类都是Exception类

语法

try#可能会出现异常的代码
except Exception as 变量:
    print(变量)

异常的else

​ else表示的是如果没有捕获到异常则需要执行的代码

语法

try#可能会出现异常的代码
except (可能出现的异常类型1,可能出现的异常类型2as 变量:
    #如果捕获到异常是指定的这个类型的执行代码
	print(变量)
else#如果没有捕获到异常则需要执行的代码

异常的finnally

​ finnally表示最终结果,不论代码是否捕获到异常(try中的代码执行之后不管是进入了except还是else)最终都要进入finnally执行

语法

try#可能会出现异常的代码
except (可能出现的异常类型1,可能出现的异常类型2as 变量:
	#如果捕获到异常是指定的这个类型的执行代码
	print(变量)
else#如果没有捕获到异常则需要执行的代码
finnally:
	#不论有无bug都执行这一行

异常的传递

​ 可以理解为异常的嵌套:

# 计算1+100
import  time
# 程序的时间线
def fun():
    try:
        res = 0
        print("1"+2)
        print(time.time())
        # 0.0168831
        try:
            for i in range(1, 101):
                res += i
                print(res)
                time
                time.sleep(2)
        except:
            print("程序被意外终止1")
    except:
        print("程序被意外终止2")
    finally:
        print(time.time())
        # 0.0178795
        return res

print( fun())

自定义异常

​ 在python中一般抛出的异常的语法是异常类对象,这些异常类对象是Python提前封装好的

语法

tryraise
	#用来引发异常,让执行except中的语句
except Exception as res:
	#捕获到自定义异常执行代码
else#如果没有捕获到异常则需要执行的代码
finnally:
	#不论有无bug都执行这一行

​ 需求:检测一些数据例如年龄不能小于0(小于0抛异常)

class AgeInputError(Exception):
    def __init__(self, age):
        self.age = age
        self.minage = 0

    def __str__(self):
        return f"你输入的年龄是{self.age},不能小于{self.minage}"

def main():
    try:
        age = int(input("请输入年龄:"))
        if age < 0:
            # raise 关键字是返回一个异常
            raise AgeInputError(age)
    except Exception as res:
        print(res)
    else:
        print("年龄无误")
    finally:
        print("注册完成")

main()

注意:

​ python中的raise关键字用于引发一个异常,基本上作用和C#中或Java中的throw关键字相同

Day19-------END

猜你喜欢

转载自blog.csdn.net/weixin_47766667/article/details/107824945