Skip to content

python的异常有两种,一种是python自带的异常,当我们写的代码在语法或其他功能的调用上有误时,如果没有异常捕捉的话代码运行会直接报错的,都算这一类。另一种就是当我们觉得,仅仅只是针对语法方面的报错已经不能满足我们的要求了,我们希望在某些逻辑的环节上,虽然语法没有错,但也要主动报错,以避免按照错误的逻辑继续执行,后面这一种就属于自定义异常,为的就是在我们需要的时候抛出一个异常。

抛出异常raise

形式功能
raise不带任何参数
raise Exception把异常的名称作为参数
raise Exception(info)把异常的名称、异常的描述信息作为参数

自定义异常

实际开发中用的比较多的是第三种,首先我们需要自定义一个异常类,自定义异常继承基类Exception:

python
class NewException(Exception):
    def __init__(self, errorinfo):
        super().__init__(self)
        self.errorinfo = errorinfo

    def __str__(self):
        return self.errorinfo

然后在需要使用的地方主动抛出异常:

python
def factorial(num):
    try:
        if num < 0 or type(num) != int:
            raise NewException("该数不能阶乘")  # 主动抛出异常
        else:
            return num * factorial(num - 1)    # 主动抛出异常
    except Exception as e:                     
        print(e)

断言assert

用于判断一个表达式,在表达式条件为false的时候触发异常。和raise的功能很相似,但是它比raise更加简洁,语法格式如下:

python
assert expression

等价于:

python
if not expression:
    raise AssertionError

案例:已知某系统有三个角色:0-管理员、1-教师、2-学生,输入的其他数据均为非法数据,使用assert断言代码如下:

python
def test(n):
    assert n in (0, 1, 2), "您输入了非法参数"
    if n == 2:
        return '学生'
    elif n == 1:
        return '教师'
    else:
        return '管理员'

输入测试语句试一下,看看是什么效果:

python
print(test(1))
print(test(1))