16、python-异常处理

1、异常(基础)exception (捕获异常,尝试接受异常通知)

  • 什么是错误:  错误是指由于逻辑或语法导致一个程序无法正常执行的问题。
  • 特点:  有些错误是无法预知的
  • 什么是异常:
  •         异常是程序出错时标识的一种状态
  •         当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
  • 作用:  用作信号,通知上层调用者有错误需要处理。

语法:

        两种语法:

             try -- except 语句(至少有一个except)

             try -- finally  语句

       1、try -- except 语句

            try:

                 可能触发异常的语句

            except  错误类型1 [as  变量1]:

                 异常处理语句1

            except  错误类型2 [as  变量2]:

                 异常处理语句2

            ...............

            except:

                    异常处理语句other

            else:#没有异常会执行

                     未发生异常语句

            finally:#任何情况下都会执行

                      最终语句

          作用:尝试捕获异常,将程序转为正常状态并继续执行。

#try-except 示例

def div_apple(n):
    print("%d个苹果,分几人。"%n)
    s = input('请输入人数:')
    cnt = int(s)
    result = n/cnt
    print('每个人分了%d个苹果'%result)
#写法1
# try:
#     div_apple(5)#此函数可能会触发错误
# except ValueError:
#     print('分苹果错误,程序停止。')
# except ZeroDivisionError:#人数为0,错误
#     print("人数不能为0")
#写法2,直接两个错误类型放在一起。   
# try:
#     div_apple(5)#此函数可能会触发错误
# except (ValueError,ZeroDivisionError):
#     print('分苹果错误,程序停止。')
#写法3,接收所有类型错误
try:
    div_apple(5)#此函数可能会触发错误
except:
    print('分苹果错误,程序停止。')
print('程序正常退出')

 

#打印出错误信息
try:
    div_apple(5)#此函数可能会触发错误
except ValueError as e:
    print('分苹果错误,程序停止。')
    print(e)
print('程序正常退出')

运行结果:
分苹果错误,程序停止。
invalid literal for int() with base 10: 'd'
程序正常退出

常见异常:https://blog.csdn.net/weixin_41357300/article/details/87709727

 

2、try-finally语句:(执行一定要执行的语句)

        语法:

               try: 

                     可能触发异常的语句

               finally:

                      一定要执行的语句。

         说明:1、finally子句不可以省略

                   2、一定不存在except子句

         作用:通常用try-finally语句来做出发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行。

         注: try-finally 语句不会改变程序的状态(正常/异常)状态

#try-finally实例

def fry_egg():
    try:
        print('打开天然气。。')
        try:
            count = int(input('请输入鸡蛋个数'))
            print('一共煎了%d个鸡蛋'%count)
        finally:
            print('关闭天然气')
    except:
        pass
fry_egg()
print('程序正常执行。')

 

3、raise语句:(发送异常通知,将程序转为异常状态)

作用:出发一个错误,让程序进入异常状态

语法:raise  异常类型    或者  raise 对象 异常

 

def make_exception():
    print('begin')
    #出发ValueError类型的异常并进入异常状态
    #raise valueError 只发送错误类型
    raise ValueError('自己编写的错误')#后面可以添加错误信息
    print('end')
try:    
    make_exception()
except ValueError as e:
    print('try里出现了值错误通知,已经捕获')
    print(e)
else:
    print('make_exception调用结束')

 

assert语句(断言语句):(根据条件触发AssertionErrror类型的异常)

语法: assert 真值表达式,错误数据(通常是字符串)

作用:当真值表达式为False时,用错误数据创建一个AssertionError类型的错误,并进入异常状态

等同于:

        if   真值表达式  == False:

                raise  AssertionError(错误数据)

#assert语句的用法

def get_score():
    s = int(input('请输入学生成绩:'))
    assert 0<=s<=100,'用户输入的整数不在0-100之间'
    return s

try:
    score = get_score()
    print('学生的成绩为:',score)
except ValueError:#类型输入错误。
    print('用户输入的成绩无法转换成整数。')
except AssertionError as e:#发生了断言错误
    print(e)

注:为什么要用异常处理机制?

    在程序调用层数较深时,向主调函数传递错误信息需要层层return返回比较麻烦,所以用异常处理机制解决此类问题。

    能够快速的将错误传递给调用者。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值