Python raise 语句详解 [Python 异常][处理手动抛出的异常]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

1 Python raise 语句概述

在 Python 中使用 raise 语句,可以在程序的指定位置手动抛出一个异常。

使用语法格式如下所示:

raise [exceptionName[(reason)]]

等价于

raise  # 该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
raise exceptionName  # 表示引发执行类型的异常。
raise exceptionName(reason)   # 在引发指定类型的异常的同时,附带异常的描述信息。

对以上格式说明,

  • [exceptionName[(reason)]]:方括号[]括起来的为可选参数。
  • exceptionName:指定抛出的异常名称。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。常见异常类型请参见博文《Python 常见异常类型介绍》
  • reason:异常信息的相关描述。如果不写此参数,抛出异常时,将没有任何异常描述信息。
  • 可选参数都省略:raise 语句会把当前错误原样抛出。

举例如下所示:

例一,无参 raise

>>> raise
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    raise
RuntimeError: No active exception to reraise

例二,raise exceptionName

>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    raise ZeroDivisionError
ZeroDivisionError

例三,raise exceptionName(reason)

>>> raise ZeroDivisionError('除数不能为零')
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    raise ZeroDivisionError('除数不能为零')
ZeroDivisionError: 除数不能为零

2 处理手动抛出的异常

raise 语句引发的异常通常用 try except(else finally)异常处理结构来捕获并进行处理。

使用 raise 语句引发异常,程序的执行是正常的,手动抛出的异常并不会导致程序崩溃。

举例如下所示:

try:
    num1 = int(input('输入一个被除数 num1:'))  # 用户输入一个被除数
    num2 = int(input('输入一个除数 num2:'))  # 用户输入一个除数
    result = num1 / num2
    # 判断用户输入的除数是否为零
    if (num2 == 0):
        raise ZeroDivisionError
except ZeroDivisionError as e:
    print('引发异常:', repr(e))

运行结果:

输入一个被除数 num1:6
输入一个被除数 num2:0
引发异常: ZeroDivisionError('division by zero')

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Python 官网

Python 3.8.2 documentation

猜你喜欢

转载自blog.csdn.net/manongajie/article/details/106288078