Python 抛出异常语法
在 Python 中,我们可以使用 raise 关键字来主动抛出异常。raise 用于抛出异常来阻断程序的正常执行,并创建自定义的异常情况。
语法:
raise 异常类名('异常的详细提示信息')说明:
使用 raise 关键字抛出异常时,我们通常会在 raise 后面跟上一个具体的异常类(例如 ValueError、TypeError 等),并且在括号中传入一段字符串,用于说明究竟是哪里出错了。
要使用 raise 关键字引发异常,首先需要创建一个异常类或使用已有的异常类。Python 提供了很多内置的异常类,如下表所示。
| 异常类 | 说明 |
|---|---|
| ValueError | 值的类型或范围不符合 |
| NameError | 变量不存在 |
| AttributeError | 属性不存在 |
| KeyError | 键不存在 |
| SyntaxError | 语法错误 |
| TypeError | 类型错误 |
| ZeroDivisionError | 除数为 0 |
| IndexError | 索引超出范围 |
| IOError | 输入输出异常 |
Python 抛出异常示例
接下来,我们通过几个简单的例子来讲解 Python 是如何抛出异常的。
示例 1:raise 抛出内置异常
def divide(x, y):
if y < 0:
raise ValueError('除数不能小于0')
return x / y
divide(20, -10)运行结果如下。
ValueError: 除数不能小于 0分析:
在上面例子中,我们定义了一个名为 divide 的函数,用于计算两个数的商。然后有这样一个需求 “除数不能为 0”。此时判断 y 是否小于 0,如果小于 0 则使用 raise 主动抛出一个异常。这样就不会执行后面的 return x/y 了。
提示: 在符合条件时,Python 本身会自动抛出一些异常而无需我们手动抛出,比如除数为 0 时会自动抛出 ZeroDivisionError 异常。但有时为了满足业务需求,我们需要在某些条件不满足时能主动抛出异常,此时就可以使用 raise 来实现。
上面使用的是 Python 内置的异常类(ValueError),我们还可以在 raise 后面使用自定义异常类,请看下面例子。
示例 2:raise 抛出自定义异常
# 自定义异常类
class MyCustomException(Exception):
def __init__(self, message):
self.message = message
def divide(x, y):
if y < 0:
# 调用自定义异常类
raise MyCustomException('除数不能小于0')
return x / y
divide(20, -10)运行结果如下。
MyCustomException: 除数不能小于 0分析:
从结果可以看出,此时 raise 抛出的就是我们自定义的异常类(即 MyCustomException)了。
