Python异常对象Exception基础类异常捕捉

Rayna ·
更新时间:2024-09-20
· 1443 次阅读

目录

异常对象

异常捕捉

异常对象

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类异常捕捉的资料请关注软件开发网其它相关文章!



exception Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号