python(二十二):异常(捕获异常+自定义异常+抛出异常)

1.错误分类

Python 有两种错误很容易辨认:语法错误和异常。
语法错误可以通过自己的认真来解决,下面让我们研究异常:即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

2.常见的一些异常

错误代码 含义
NameError 名字错误
ZeroDivisionError 0错误
TypeError 类型错误
SyntaxError 语法错误
IndexError 索引超出序列范围
KeyError 请求一个不存在的字典关键字
IOError 输入输出错误
AttributeError 尝试访问未知的对象属性

3、捕获异常

A.捕获单个异常

===================================捕捉单个异常,输出自己提示信息
try:
    print(eval(input('请输入数学表达式:')))#输入3/0
except ZeroDivisionError :
    print('被除数不能为0')#被除数不能为0
# #==================================捕捉单个异常,输出报错提示信息
try:
    print(1/0)
except ZeroDivisionError as p:
    print(p)

B.捕获多个异常

#====捕捉多个异常,一个try和多个except或者元组结构:一个try和except(异常1,异常2...)
try:
    a=[1,2,3]
    print(a[6])#超出索引
    print(1/0)
except IndexError:
    print('超出索引')
except ZeroDivisionError:
    print('被除数不能为0')
#---------------------------------------------------------
#或者写为
try:
    a=[1,2,3]
    print(a[2])
    print(1/0)#结果:有异常啦!
except (IndexError,ZeroDivisionError):#弊端:不知道具体是哪个异常
    print('有异常啦!')

C.捕获所有异常

#===================================捕捉所有异常两种格式:
#格式1:try--except
try:
    a=[1,2]
    print(a[9])
except:#弊端:不知道具体异常
    print('有异常')
#------------------------------------------------------------
# 格式2:try--except Exception as:
try:
    a = [1, 2]
    print(a[9])
except Exception as i:#可以知道具体异常
    print(i)

# 格式2:try--except Exception:
try:
    a = [1, 2]
    print(a[9])
except Exception :#不知道具体异常
    print('111'

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

出错异常类型和捕捉的异常不一致,会出错结束

————————————————————————————————

4.try…except…else…finally结构统讲代码:

#=================try...except...else...finally格式
#不管try有没有异常,最终都会只需finally的代码
try:
    print('我有错吗?')
except Exception:
    print('只要有异常,就会执行我!')
else:
    print('只有没有异常,才会执行我!')
finally:
    print('不管有没有异常,一定会执行我!')

结果:
python(二十二):异常(捕获异常+自定义异常+抛出异常)_第1张图片
————————————————————————————————————

5.抛出异常

A.抛出系统异常

格式 描述
raise异常类型(‘描述信息’) 当程序执行到raise时候,会自动的触发异常,让程序结束
#---------当程序执行到raise,会自动触发异常,让程序结束
while True:
    name=input('请输入您的名字:')
    try:
        if len(name)<3:
            raise Exception('名字太短了!')#是因为啥才跑出的异常
        else:
            print('名字还行')
            break
    except Exception as e:
        print(e)

python(二十二):异常(捕获异常+自定义异常+抛出异常)_第2张图片
B.抛出自定义异常
当程序中的异常类型不满足时,我们可以自定义类型异常

# 当程序异常类型不满足,可以自定义异常
class Myexception(Exception):
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name


try:
    raise Myexception('异常消息')
except Myexception as e:
    print(e)

b = Myexception('hhh ')

在这里插入图片描述

你可能感兴趣的:(python基础)