Python的错误和异常处理

本文详细解释了Python中的错误和异常的区别,通过除法函数示例说明了如何处理异常,以及何时使用错误而非异常。还讨论了正则表达式匹配中的特殊情况。
摘要由CSDN通过智能技术生成

错误和异常

错误和异常如何区分

错误Error是程序中可以预知的情况,所以会故意设置一个错误,用于输出设置好的错误的情况
异常Exception是程序中无法预知的情况,所以会抛出一个异常

以除法函数为例:
1.异常

def div(a,b):
    if b == 0:
        raise Exception("被除数不能为0")  #这是异常
    return a/b

def cal():
    a = int(input())
    b = int(input())
    div(a,b)
    #此处为其他代码逻辑
cal()
    #如果这样,终端里输入被除数0,程序会直接抛异常,就不会执行下面的代码逻辑了

解决:捕获异常

def div(a,b):
    if b == 0:
        raise Exception("被除数不能为0")  #这是异常
    return a/b

def cal():
    a = int(input())
    b = int(input())
    try:
        div(a,b)
    except Exception as e:
        print(e)
    #此处为其他代码逻辑
cal()
#这样即使输入被除数0,程序也会继续执行后面的代码逻辑,只是输出一个异常的提示字符串

可以把下面的代码放入while循环,输入错误也能重新输入

def div(a,b):
    if b == 0:
        raise Exception("被除数不能为0")  #这是异常
    return a/b

def cal():
    while 1:
        a = int(input())
        b = int(input())
        try:
            div(a,b)
        except Exception as e:
            print(e)
        #此处为其他代码逻辑
cal()

2.错误

def div(a,b):
    if b == 0:
        return None, "被除数不能为0"  #这就是错误

    return a/b, None

def cal():
    while 1:
        a = int(input())
        b = int(input())
        v,err = div(a,b)   #v和err用于接受div函数return的两个结果
        if err is not None:  
        #由于None是全局唯一的对象,所以当把None赋值给某个值的时候要用`is`,而不是`==`
        #如果用`=`,会报错; 如果用`==`,只会返回'None'这个字符串
            print(err)
        else:
            print(v)
cal()

但有些情况会把异常当作错误处理,在需要抛异常的时候却没抛异常,让程序继续执行了

import re
desc = "age:18"
a = re.match("ages:(.*)",desc)  #ages在这里并不存在
if a is not None:
    print(a.group(1))
#但是程序不会抛异常,因为正则表达式默认是会存在匹配不到的情况,默认这不是异常
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值