python语言基础-3 异常处理-3.3 抛出异常
声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。
3.3 抛出异常
业务层级(高层级)的代码会捕捉一些异常进行提示,而基础层级(低层级)的代码中则可能需要我们主动抛出一些相应类型的异常。
python中抛出异常的关键字是raise。raise用于抛出一个异常实例,通常有以下三种常用情况的用法:
- raise单独使用,后面不跟异常对象或异常类。可以在特定语句执行是引发RuntimeError异常;
- raise后面跟异常类。抛出指定异常类的默认实例;
- raise后面跟异常实例。抛出指定的异常实例。
(1)raise单独使用,抛出RuntimeError异常
def input_age(age):
if 150 >= age >= 0:
return age
if age < 0 or age > 150:
raise
try:
input_age(160)
except RuntimeError:
print("发生了运行时异常")
except Exception as e:
print("异常了")
(2)raise后面跟异常类
前面我们在方法重载时学习到,如果没有相应的重载方法将会异常。在这个例子中我们会在原方法中抛出一个异常。如下:
from functools import singledispatchmethod
class Negator:
@singledispatchmethod
@classmethod
def neg(cls, arg):
raise NotImplementedError # 后面跟一个异常类
@neg.register
@classmethod
def _(cls, arg: int):
return -arg
@neg.register
@classmethod
def _(cls, arg: bool):
return not arg
n = Negator.neg("except")
(3)raise后面跟异常实例
还是方法重载的例子,raise后面也可以抛出一个异常实例。如下:
from functools import singledispatchmethod
class MyException(Exception):
def __init__(self, code, message):
self.code = code
self.message = message
def __str__(self):
return f"{self.code}: {self.message}"
class Negator:
@singledispatchmethod
@classmethod
def neg(cls, arg):
raise MyException(400, "缺少相关的重载方法") # 后面跟的是一个实例
# raise NotImplementedError("缺少相关的重载方法") # 内置异常也可以实例化
@neg.register
@classmethod
def _(cls, arg: int):
return -arg
@neg.register
@classmethod
def _(cls, arg: bool):
return not arg
n = Negator.neg("except")