浅谈Python抛出异常、自定义异常和传递异常
异常处理是编程中必不可少的部分,能够提高程序的健壮性和可读性。Python中的异常处理机制提供了非常方便和灵活的方法。
Python中抛出异常
抛出异常可以在代码运行过程中发现错误,主动终止程序的运行。
Python中内置了许多异常类型,比如 IndexError
、KeyError
等等,还有 Exception
作为所有异常类型的基类。
我们可以调用 raise
关键字来抛出异常,例如:
def divide(a, b):
if b == 0:
# 抛出 ZeroDivisionError 异常
raise ZeroDivisionError('除数不能为 0')
return a / b
try:
result = divide(10, 0)
except ZeroDivisionError as e:
print(e)
上面的代码中,我们定义了一个计算 a / b
的函数 divide
,当 b
为 0
时,会抛出 ZeroDivisionError
异常,其中错误的描述信息是 '除数不能为 0'
。
在主程序中,我们使用 try...except
语句来捕获异常,如果捕获到了 ZeroDivisionError
类型的异常,就会打印异常信息 e
。
Python中自定义异常
除了内置的异常类型,我们还可以自定义异常类型来更好地适应实际场景的需求。
自定义异常类可以继承内置的异常类或者异常基类 Exception
,通常情况下我们会自定义一个继承自 Exception
的异常类。
例如,我们可以定义一个自定义异常类 MyError
,来处理一种特定错误:
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
def func(n):
if n < 0:
raise MyError('数字不能为负数')
return n ** 2
try:
result = func(-1)
except MyError as e:
print(e)
上面的代码中,我们定义了一个自定义异常类 MyError
,并在 func
函数中判断输入的数字 n
是否为负数,如果是则抛出自定义异常 MyError
。
在主程序中,我们使用 try...except
语句来捕获自定义异常 MyError
,并打印异常信息 e
。
Python中传递异常
上面的示例中,我们在函数内部抛出异常并在外部 try...except
中捕获异常,处理错误信息。但是有些时候,我们需要将异常传递到更外层的 try...except
中,供上一级调用函数处理异常。
Python允许我们在 except
中重新抛出异常,使用 raise
关键字即可。
例如,我们定义一个函数 foo
,函数内部调用了函数 bar
,bar
函数会抛出异常。在 foo
中我们想要捕获 bar
函数抛出的异常并统一处理。
def bar():
raise ValueError('bar 抛出异常了')
def foo():
try:
bar()
except ValueError as e:
raise e
try:
foo()
except ValueError as e:
print('捕获到了异常:%s' % e)
上面的代码中,我们定义了函数 bar
和函数 foo
,当 bar
函数抛出异常时,我们使用 try...except
语句捕获异常并重新抛出。
在主程序中,我们使用 try...except
语句再次捕获异常,并打印出错误信息。
总结
异常处理是程序中必不可少的一部分,Python的异常处理机制非常方便和灵活。
我们可以通过 raise
关键字抛出内置的异常或者自定义异常,使用 try...except
语句捕获异常并处理,也可以在 except
中重新抛出异常传递到上一级函数处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈python抛出异常、自定义异常, 传递异常 - Python技术站