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

作者:jiangwei0512 时间:2021-10-21 03:46:25 

异常对象

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..语句。

来源:https://blog.csdn.net/jiangwei0512/article/details/106596297

标签:Python,异常捕捉,对象,Exception类
0
投稿

猜你喜欢

  • Python多线程编程(八):使用Event实现线程间通信

    2023-05-07 15:25:50
  • 详解Django中的ifequal和ifnotequal标签使用

    2023-06-24 05:07:04
  • Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)

    2021-12-24 13:28:27
  • python3实现磁盘空间监控

    2023-07-09 14:12:49
  • python 爬取腾讯视频评论的实现步骤

    2021-06-19 03:57:58
  • Python图像处理之图像金字塔详解

    2022-03-11 10:35:04
  • jupyter 使用Pillow包显示图像时inline显示方式

    2021-09-08 00:42:02
  • Python下singleton模式的实现方法

    2022-10-03 12:15:02
  • python实现UDP协议下的文件传输

    2023-10-10 10:26:20
  • Python 编程语言详细介绍

    2022-08-21 08:39:27
  • LyScript实现计算片段Hash并写出Excel的示例代码

    2021-11-20 18:41:45
  • 用于WebKit的CSS诀窍[译]

    2009-03-11 20:03:00
  • python文件处理笔记之文本文件

    2022-10-30 22:38:32
  • [翻译]标记语言和样式手册 chapter 5 表单

    2008-01-23 17:20:00
  • python实现爬虫统计学校BBS男女比例之数据处理(三)

    2022-12-11 18:56:45
  • PHP邮件发送类PHPMailer用法实例详解

    2023-11-19 16:31:17
  • win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题

    2022-03-31 17:26:15
  • Python子类继承父类构造函数详解

    2023-02-27 09:13:03
  • python3 求约数的实例

    2023-12-29 03:18:59
  • Linux下为不同版本python安装第三方库

    2023-11-12 05:04:35
  • asp之家 网络编程 m.aspxhome.com