python 异常处理小结 try except raise assert

Posted bitcarmanlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!

以上是关于python 异常处理小结 try except raise assert的主要内容,如果未能解决你的问题,请参考以下文章

python异常处理机制(try:except)

Python入门教程第53篇 异常处理之try…except…finally

[python]异常处理与try语句

python异常处理

Python基础Python异常处理-Try函数

python学习笔记-day8-2-python 异常处理 try except