Python中异常类结构
在 Python 中, BaseException是所有异常的基类,BaseException类有四个子类:
- SystemExit:解释器请求退出
- KeyboardInterrupt:用户中断执行(通常是输入^C)
- GeneratorExit:生成器(generator)发生异常来通知退出
- Exception:常规错误的基类所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应该继承此类。
异常处理方法
1.try-except
Python的异常处理主要通过try-except代码块实现,基本语法如下
try:
# block of code that might raise an exception
except ExceptionType:
# block of code to execute if an exception of type ExceptionType is raised
这里的ExceptionType可以是任何的异常类型,比如ValueError, TypeError, ZeroDivisionError等。
如果try语句块中的代码抛出一个匹配ExceptionType的异常,Python会立即跳到except语句块中执行相应的代码。
一个try语句可以有多个except子句,用于处理不同类型的异常。
使用多个except语句可以捕获不同类型的异常。但是,在实际编码中,可能会遇到需要对多种异常类型采取相同处理方式的情况。此时可以将这些异常类型放在一个元组中,并在except语句中进行捕获。例如:
try:
# some code that might raise an exception
except (ValueError, TypeError):
# handle both exceptions in the same way
2.final/else关键字
除了try和except之外,Python的异常处理还有两个其他的关键字:finally和else。
finally语句块中的代码无论是否发生异常都会被执行。
这在需要确保某些代码始终运行,例如清理资源,无论是否发生异常,都很有用。
try:
# some code that might raise an exception
finally:
# this code will run no matter what
print('Cleaning up...')
else语句块中的代码会在try块没有抛出任何异常的情况下运行。
这在需要区分“正常”运行和异常处理时很有用。
try:
# some code that might raise an exception
except ExceptionType:
# handle the exception
else:
# this code will run only if no exception was raised
print('No exceptions were raised.')
3.获取异常信息
当程序抛出异常时,系统会自动记录异常信息的相关细节,比如异常类型、异常信息、异常发生的位置等。在异常处理机制中,异常信息可以通过Exception对象获取。在except语句中,可以将异常对象赋值给一个变量,并利用这个变量来获取异常信息。
try:
# some code that might raise an exception
except Exception as e:
print('Caught an exception:', type(e), e)