Python异常对象Exception基础与捕捉机制详解

清欢
清欢
发布时间:2026-10-15 | 4人浏览过
原创

本文详细介绍Python中的异常处理机制,重点解析Exception基础类的层级结构及自定义异常类的实现方法。通过try...except...else...finally语句演示如何有效捕捉和处理不同类型的异常,避免程序因未处理异常而终止,提升代码健壮性。

异常对象

在Python程序中,当遇到错误时,系统会自动引发一个异常。

Python通过创建异常对象来具体表示发生的异常情况。

若该异常对象未被程序处理或捕捉,Python解释器将生成回溯信息(traceback)并终止程序的执行。

以下是一个简单的示例:

def func1():
    raise Exception
if __name__ == "__main__":
    func1()

执行该代码后,系统将报错:

(venv) E:\Codes\python_everything\begining-python\src\08>list8-2.py
Traceback (most recent call last):
  File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 19, in <module>
    func1()
  File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 15, in func1
    raise Exception
Exception

异常具有多种类型,其中Exception是基础类,其下包含各种子类:

 +-- Exception
      +-- StopIteration
      +-- StandardError
      |    +-- BufferError
      |    +-- ArithmeticError
      |    |    +-- FloatingPointError
      |    |    +-- OverflowError
      |    |    +-- ZeroDivisionError
      |    +-- AssertionError
      |    +-- AttributeError
      |    +-- EnvironmentError
      |    |    +-- IOError
      |    |    +-- OSError
      |    |         +-- WindowsError (Windows)
      |    |         +-- VMSError (VMS)
      |    +-- EOFError
      |    +-- ImportError
      |    +-- LookupError
      |    |    +-- IndexError
      |    |    +-- KeyError
      |    +-- MemoryError
      |    +-- NameError
      |    |    +-- UnboundLocalError
      |    +-- ReferenceError
      |    +-- RuntimeError
      |    |    +-- NotImplementedError
      |    +-- SyntaxError
      |    |    +-- IndentationError
      |    |         +-- TabError
      |    +-- SystemError
      |    +-- TypeError
      |    +-- ValueError
      |         +-- UnicodeError
      |              +-- UnicodeDecodeError
      |              +-- UnicodeEncodeError
      |              +-- UnicodeTranslateError

开发者还可以通过继承Exception类来实现自定义的异常类:

class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    func2()

异常捕捉

异常是可以被捕捉的,这需要借助try...except...语句结构:

class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    try:
        func2()
    except SomeError:
        print("Some error happened")

在此例中,由于成功捕捉到了对应的参数,因此不会显示回溯信息:

(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Some error happened

然而,如果发生的是其他类型的异常:

def func1():
    raise Exception
class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    try:
        func1()
    except SomeError:
        print("Some error happened")

此时Exception并未被捕获,因此程序仍会显示回溯信息:

(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Traceback (most recent call last):
  File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 27, in <module>
    func1()
  File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 15, in func1
    raise Exception
Exception

若执行过程中未出现异常,程序将继续向下执行。但为了逻辑更清晰,可以使用else语句来指定没有异常时执行的代码:

if __name__ == "__main__":
    try:
        print("No exception")
    except SomeError:
        print("Some error happened")
    else:
        print("No error happened")

运行结果如下:

(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
No exception
No error happened

有时,即使发生了无法捕捉的异常,我们仍希望执行某些清理或收尾语句,这时可以使用finally语句:

def func1():
    raise Exception
class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    try:
        func1()
    except SomeError:
        print("Some error happened")
    else:
        print("No error happened")
    finally:
        print("Do something")

在Python中,更推荐使用try...except...语句结构来替代传统的if...else..判断逻辑。

以上就是Python异常对象、Exception基础类及异常捕捉的详细内容,更多关于Python对象Exception类异常捕捉的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表