Python异常对象Exception基础与捕捉机制详解
本文详细介绍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类异常捕捉的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









