python 异常处理小结 try except raise assert

1.try-except

try except组合是用来处理异常的一对黄金搭档,python中也不例外。可以看个简单的例子:

def t1():
    try:
        a, b = 1.0, "2.0"
        c = a / float(b)
        print("c is: ", c)
    except ValueError as err:
        print("b must be digit!")
    except ZeroDivisionError as err:
        print("b is zero!")
    except Exception as ex:
        print("there is unexpect exception!")

上面两个数相除的例子,首先,如果b的值是"abc",会抛出一个ValueError的异常:could not convert string to float: 'abc',该异常被except ValueError as err捕获。其次,如果b的值是"0.0",会抛出一个ZeroDivisionError的异常:ZeroDivisionError: float division by zero,该异常被except ZeroDivisionError as err:捕获。最后,如果还有其他异常,则被最后一句except语句捕获。

2.raise

上面的例子中,都是被动接受处理异常。自然我们也可以主动抛出异常,这个时候就用到了raise关键字。

相比被动接受处理异常,主动抛出异常的好处自然很多。
1.使用方式更为灵活,可以根据我们的业务场景,业务需求,来定义虽然代码语法上准确无误,但不满足我们要求的情况为异常情况。
2.可以自定义异常报错信息,方便我们发现与排查问题。

raise常见的用法有以下三种

1.只有一个raise关键字,可以引发当前捕获的异常。

def t1():
    try:
        x = "x"
        x = float(x)
    except:
        raise

执行这段代码,会有如下输出:

ValueError: could not convert string to float: 'x'

2.raise + 异常类信息,表示引发异常的类型。

def t1():
    try:
        x = "x"
        x = float(x)
    except:
        raise ValueError()

执行上述代码,有如下输出:

ValueError

如果将上面的代码稍作修改:

def t1():
    try:
        x = "x"
        x = float(x)
    except:
        raise ZeroDivisionError()

上面的代码则会输出如下:

ValueError: could not convert string to float: 'x'

During handling of the above exception, another exception occurred:
...
ZeroDivisionError

上面的例子,float(x)转化的时候,系统抛出了一个ValueError的异常,但是因为我们raise的时候,指定的是ZeroDivisionError,所以还会抛出来一个ZeroDivisionError。

3.raise + 异常类型 + 描述信息

def t1():
    x = "a"
    if not x.isdigit():
        raise ValueError("x must be digit!")

上面代码运行,则会输出如下信息:

ValueError: x must be digit!

3.try-except捕获raise异常

raise出来异常以后,我们经常还用try except对异常进行捕获

def t1():
    try:
        x = "a"
        if not x.isdigit():
            raise ValueError("x must be a num!")
    except Exception as ex:
        print("there is exception: ", repr(ex))

上面的代码运行结果如下

there is exception:  ValueError('x must be a num!')

4.assert

assert是用来表明某个条件为真,当assert语句失败返回False的时候,会抛出AssertionError。

看个简单的实例

def t3():
    a = 2
    assert a > 5
    print(a ** 2)

此时代码会抛出异常

AssertionError

如果将a赋值为10,代码会输出100。

assert本质上还是raise一个AssertionError,所以我们也可以使用try-catch来捕获这个异常,而不是让这段code直接崩溃。

def sqrt(x):
    try:
        assert x >= 0
        num = math.sqrt(x)
        print("num is: ", num)
    except:
        print("if you want to solve sqrt num, x must be bigger or equal zero!")

sqrt(4)
sqrt(-4)
num is:  2.0
if you want to solve sqrt num, x must be bigger or equal zero!
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值