python中的异常捕获 与 断言

1.异常捕获处理

  • 异常:终止程序而现实的错误信息

  • 基本格式

try 将不能确定是否能正常执行的代码放入
except 出现异常错误执行except中语句 并执行 try之后的代码
(except Exception  未知错误)
else 如果try中的语句 没有错误执行 else;若try出错 不执行else
finally 无论try中语句是否有错误,都会执行finally
try :
    num=int(input("请输入一个数字:"))
    res=2/num
except ValueError:
    print("输入类型错误!请输入一个正确的数字!")
except ZeroDivisionError:
    print("0不能做被除数,请重新输入一个正确的数字!")
except  Exception as f:
    print("Error!",f)
else:
    print(res)
finally:
    print("ending~~~")

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.多个函数嵌套调用时,异常处理

  • 函数多层嵌套时,函数错误会一层一层的往上寻找,最终找到主函数中去;故将try写到主函数位置
def demo1():
    try:
        return int(input('请输入正确的整数:'))
    except Exception as r:
        print('未知错误 %s' %r)
def demo2():
    return demo1()

print(demo2())

3.主动抛出异常

  • 当python解释器无法判断需求异常时,自动设置异常,将其抛出,供以使用,不会终止程序。

  • 创建异常对象:ex=Exception('...')

  • 主动抛出异常:raise ex

  • 捕获异常:try
    注意: 抛出后需要捕获 如不捕获会出错

def input_passwd():
    # 1.提示用户输入密码
    pwd = input('请输入密码:')
    # 2.判断密码的长度
    if len(pwd) >=8:
        return pwd

    # 3.如果<8就主动抛出异常
    print('主动抛出异常')
    # a.创建异常对象
    ex = Exception('密码长度不够,必须大于8位')
    # b.主动抛出
    raise ex
try:
    print(input_passwd())
except Exception as re:
    print(re)

在这里插入图片描述

4.断言

  • assert 提前预言 提前知道错误的原因,会终止程序。
def func(num,div):
    assert (div !=0),'div不能为0'
    return num/div

print(func(10,0))
print('%%%')

在这里插入图片描述

5.异常与断言的区别

  • 异常被捕获后可以不做处理,程序从捕获位置继续执行,断言是无法忽略的,程序在断言失败处立即终止因此断言通常用于调试版本,用来发现程序中的逻辑错误。虽然异常也能起到这样的作用,但是不应该用异常代替断言:
  1. 如果发现了逻辑错误,必须修改程序,而不可能在程序中进行处理和恢复,所以不需要 向外传送信息,没有必要使用异常;
  2. 使用断言的开销比异常小得多,而且断言可以从发布版中完全去除。
  • 异常用于处理正确程序中的运行期问题(比如内存分配失败,窗口创建失败,线程创建失败,打开文件失败),以尽可能恢复,而不是终止程序。对于运行异常,使用断言是非常不合适的,理由很显然:
  1. 断言在发布版不起作用;
  2. 断言的处理方式不够友好;
  3. 运行异常不是程序错误,没有必要报告源代码出错位置。

转载链接

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值