Python学习笔记

异常机制概述

异常机制用于捕获代码执行过程可能出现的错误,以便分门别类的针对错误类型进行相应的错误处置和提示,避免程序运行的中断。同时在部分场景,可以人为的主动抛出错误,以执行我们想要进行的代码程序。

内置异常错误

NameError:常出现于未定义的变量名称
IndexError:常见于列表等序列索引不合法问题
SyntaxError:语法问题出错
ZeroDivisionError:分母为0出错
Python内置错误类型众多,详细资料请见Built-in Exceptions.

异常机制语法

try语法

try:
	pass
except:
	pass

工作机制

  1. 首先执行try代码块里的内容,如果没有发生错误,则跳过except代码块的内容;
  2. 如果try代码块里面发生错误,而且错误类型匹配except后面的错误类型名,则执行except代码块的内容,之后正常执行try…except内容之后所有代码,不会出现报错信息;
try:
    print("1/0 = {}".format(1/0))
except:
    print("除法中分母不可以为0")

print("haha")

在这里插入图片描述

  1. 如果出现未被定义的exception,则会将错误向上传递,若不匹配所有父类中的错误,则程序停止执行;

  2. try后面可以跟着多个except,分别表示出现不同错误执行不同处理程序

try:
    print(1/0)
except ZeroDivisionError:
    print('zero is error')
except NameError:
    print("the name of variable is not defined.")

try:
    x = name
except ZeroDivisionError:
    print('zero is error')
except NameError:
    print("the name of variable is not defined.")

在这里插入图片描述

  1. 不同错误发生,也可以对应到相同的错误处理程序,即一个except后可以跟多个错误类型名,将这些错误放到一个元组中即可;
def check(flag):
    try:
        if(flag == 1):
            print("ZeroDivisionError")
            print(1/0)
        elif(flag == 2):
            print("NameError")
            x = name
        else:
            print("AttributeError")
            print(x.age)
    except(ZeroDivisionError,NameError,AttributeError):
        print("error is occuring")

for i in range(3):
    check(i+1)

在这里插入图片描述

  1. try…except语句还可以加上else语句,但是else语句必须在所有except语句之后。在try代码块内没有出现错误的时候,执行else代码块里面的内容;
def check(flag):
    try:
        if flag == 1:
            print('haha')
        else:
            print(1/0)
    except ZeroDivisionError:
        print('error is occuring.')
    else:
        print('the code is correct.')

for i in range(2):
    check(i+1)

在这里插入图片描述

  1. except语句在异常名称后可以指定变量,该变量名指向异常实例。如果异常带有参数,则参数存储在instance.args中,同时该实例定义了__str__魔术方法,可以直接打印实例来查看实例携带的参数;
try:
    raise ZeroDivisionError('haha', 12345)
except ZeroDivisionError as zero:
    print(type(zero))
    print(zero.args)
    print(zero)

在这里插入图片描述

  1. try…except语句不仅仅处理直接发生的错误,在try语句中函数调用内部出现的错误也会被捕获;
  2. 定义清理操作,即try…except语句再加上一个finally语句,该代码块内容无论是否发生错误都会执行。try;except;else;finally可以同时出现,也可以有选择的出现;
def check(flag):
    try:
        if(flag == 1):
            print("Hello World!")
        elif(flag == 2):
            print("The code is occuring error.")
            print(1/0)
        else:
            raise NameError('Tom','Daming')
    except ZeroDivisionError:
        print('Zero is not correct.')
    except NameError as na:
        print("The coder raises the NameError.")
        print("Carry the args:{}|{}".format(na.args[0],na.args[1]))
    else: # 不发生错误时执行
        print('The code is correct.')
    finally: # 不管有无错误都会执行的内容
        print("clean up the code")

for i in range(3):
    print('*'*5+str(i+1)+'*'*5)
    check(i+1)

在这里插入图片描述

  1. try语句碰到return continue break关键字,会优先执行finally语句里面的内容。
def bool_return():
    try:
        return True
    finally:
        return False

print(bool_return())

在这里插入图片描述

异常抛出

raise语句允许人们主动抛出一个异常,raise后面的唯一参数必须是一个继承于类Exception异常实例或者异常类,类作为参数传递时会隐式实例化。

raise ZeroDivisionError("error is occuring") # 括号内为显示信息

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值