异常处理

在 Python 中,通过两个重要的功能来处理程序在运行中出现的异常和错误。其一是本文提到的异常处理,其二是断言(Assertions)。

python中,所有的异常均派生自 BaseException(所有异常的基类)类的实例,系统提供的异常类称为内置异常,它们可通过解释器或内置函数来生成。并且都会具有一个提示导致错误详细原因的“关联值”。 这可以是一个字符串或由多个信息项(例如一个错误码和一个解释错误的字符串)组成的元组。 关联值通常会作为参数被传递给异常类的构造器。

1、常见的处理异常的方式:

try:
可能出错的代码块
except 错误类型:
异常处理语句 除此之外,还有以下格式:
1.try...except结构 异常处理结构中最常见也最基本的结构。
2.try...except...else结构 带else子句的异常处理结构,如果没有异常则执行else语句。
3.try...except...except...结构,多个except语句,同一段代码可能会抛出多个异常。
4.try...except...finally结构,finally语句不论是否发生异常都会执行。
2、使用 except 捕获异常

一般我们在 try 语句中放入可能会发生异常的代码,一旦发生异常就会跳转至 except 语句处,与相应的错误类型进行匹配。在找到对应错误类型后,执行对应语句处理异常。

Exception 类是常规错误的基类。
a=10
b=0 try:
r=a/b
print("a/b="+r)
except Exception as e:
print("异常:除数为0") 输出:
异常:除数为0
多重 except 捕获不同种类异常与else 和 finally 的使用。
a=10
b=0 try:
r=a//b
print(r)
except TypeError as e:
print("这是:类型错误")
except ZeroDivisionError:
print("这是:0判断")
else: # 如果不发生错误,执行
print("这是:else")
finally: # 无论是否发生错误,一定会执行
print("这是:finally") 输出:
这是:0判断
这是:finally

3、自定义错误类型

内置异常类可以被子类继承以定义新的异常。即我们可以从 Exception 类或它的某个子类派生出新的异常类型。

# 自定义错误类型
class Err(Exception):
def __init__(self,msg):
self.msg=msg try:
raise Err("这是自定义错误") # 抛出异常,类似C++中的throw
except Err as e:
print(e) 输出:
这是自定义错误

常见异常类型:

以下内容一用自python3 官方开发文档 内置异常中的一部分,更多内容或是详情请参看 python 社区。 》点击这里:python 内置异常

基类
1. 下列异常主要被用作其他异常的基类。
  • exception BaseException

    所有内置异常的基类。 它不应该被用户自定义类直接继承 (这种情况请使用 Exception)。 如果在此类的实例上调用 str(),则会返回实例的参数表示,或者当没有参数时返回空字符串。
  • exception Exception

    所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类。
  • exception ArithmeticError

    此基类用于派生针对各种算术类错误而引发的内置异常: OverflowError, ZeroDivisionError, FloatingPointError。
  • exception BufferError

    当与 缓冲区 相关的操作无法执行时将被引发。
  • exception LookupError

    此基类用于派生当映射或序列所使用的键或索引无效时引发的异常: IndexError, KeyError。 这可以通过 codecs.lookup() 来直接引发。
具体异常:
2.以下异常属于经常被引发的异常。
  • exception AssertionError

    当 assert 语句失败时将被引发。
  • exception AttributeError¶

    当属性引用 (参见 属性引用) 或赋值失败时将被引发。 (当一个对象根本不支持属性引用或属性赋值时则将引发 TypeError。)
  • exception EOFError

    当 input() 函数未读取任何数据即达到文件结束条件 (EOF) 时将被引发。 (另外,io.IOBase.read() 和 io.IOBase.readline() 方法在遇到 EOF 则将返回一个空字符串。)
  • exception ImportError

    当 import 语句尝试加载模块遇到麻烦时将被引发。 并且当 from … import 中的 “from list” 存在无法找到的名称时也会被引发。
  • exception ModuleNotFoundError

    ImportError 的子类,当一个模块无法被定位时将由 import 引发。 当在 sys.modules 中找到 None 时也会被引发。
  • exception IndexError

    当序列抽取超出范围时将被引发。 (切片索引会被静默截短到允许的范围;如果指定索引不是整数则 TypeError 会被引发。)
  • exception KeyError

    当在现有键集合中找不到指定的映射(字典)键时将被引发。
  • exception KeyboardInterrupt

    当用户按下中断键 (通常为 Control-C 或 Delete) 时将被引发。 在执行期间,会定期检测中断信号。 该异常继承自 BaseException 以确保不会被处理 Exception 的代码意外捕获,这样可以避免退出解释器。
  • exception MemoryError

    当一个操作耗尽内存但情况仍可(通过删除一些对象)进行挽救时将被引发。 关联的值是一个字符串,指明是哪种(内部)操作耗尽了内存。 请注意由于底层的内存管理架构(C 的 malloc() 函数),解释器也许并不总是能够从这种情况下完全恢复;但它毕竟可以引发一个异常,这样就能打印出栈回溯信息,以便找出导致问题的失控程序。
  • exception NameError

    当某个局部或全局名称未找到时将被引发。 此异常仅用于非限定名称。 关联的值是一条错误信息,其中包含未找到的名称。
  • exception OSError(errno, strerror[, filename[, winerror[, filename2]]])

    此异常在一个系统函数返回系统相关的错误时将被引发,此类错误包括 I/O 操作失败例如 “文件未找到” 或 “磁盘已满” 等(不包括非法参数类型或其他偶然性错误)。
  • exception SyntaxError

    当解析器遇到语法错误时将被引发。 这可以发生在 import 语句,对内置函数 exec() 或 eval() 的调用,或者读取原始脚本或标准输入(也包括交互模式)的时候。
  • exception IndentationError

    与不正确的缩进相关的语法错误的基类。 这是 SyntaxError 的一个子类。
  • exception TabError¶

    当缩进包含对制表符和空格符不一致的使用时将被引发。 这是 IndentationError 的一个子类。
  • exception TypeError¶

    当一个操作或函数被应用于类型不适当的对象时将被引发。 关联的值是一个字符串,给出有关类型不匹配的详情。
  • exception UnicodeError¶

    当发生与 Unicode 相关的编码或解码错误时将被引发。 此异常是 ValueError 的一个子类。
  • exception ValueError¶

    当操作或函数接收到具有正确类型但值不适合的参数,并且情况不能用更精确的异常例如 IndexError 来描述时将被引发。

OS 异常

下列异常均为 OSError 的子类,它们将根据系统错误代码被引发。

  • exception BlockingIOError¶

    当一个操作会被某个设置为非阻塞操作的对象(例如套接字)所阻塞时将被引发。 对应于 errno EAGAIN, EALREADY, EWOULDBLOCK 和 EINPROGRESS。
  • exception FileExistsError

    当试图创建一个已存在的文件或目录时将被引发。 对应于 errno EEXIST。
  • exception FileNotFoundError

    当所请求的文件或目录不存在时将被引发。 对应于 errno ENOENT。
  • exception InterruptedError

    当系统调用被输入信号中断时将被引发。 对应于 errno EINTR。
  • exception TimeoutError

    当一个系统函数发生系统级超时的情况下将被引发。 对应于 errno ETIMEDOUT
警告
3. 下列异常被用作警告类别;请参阅 警告类别 文档了解详情。
  • exception Warning

    警告类别的基类。
  • exception UserWarning

    用户代码所产生警告的基类。
  • xception SyntaxWarning

    与模糊的语法相关的警告的基类。
  • exception RuntimeWarning

    与模糊的运行时行为相关的警告的基类

以上内容只列出部分,详情请参考 python 官方文档。


附:

内置异常:https://docs.python.org/zh-cn/3/library/exceptions.html?highlight=exception#Exception

python学习笔记(六)——异常处理的更多相关文章

  1. Python学习笔记之异常处理

    1.概念 Python 使用异常对象来表示异常状态,并在遇到错误时引发异常.异常对象未被捕获时,程序将终止并显示一条错误信息 >>> 1/0 # Traceback (most re ...

  2. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

  3. python学习笔记(六)---文件操作与异常处理机制

    文件读取 读取整个文件 要读取文件,需要一个包含几行文本的文件.下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行: pi_digits.txt 3.14159 ...

  4. python学习笔记六 面向对象相关下(基础篇)

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...

  5. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  6. 【Python学习笔记】异常处理try-except

    Python异常处理 我们一般使用try-except语句来进行异常处理. 使用except Exception as err可以统一捕捉所有异常,而也可以分开处理单个异常. # 分开捕捉单个异常 t ...

  7. python学习笔记(异常处理)

    上次提到正则表达式 当未匹配到数据返回值 None 再使用 match.group 会出现异常 AttributeError 为了避免异常我改成“ match != None” 这次加入异常处理 #! ...

  8. Python学习笔记9——异常处理

    处理异常 如果执行到程序中某处抛出了异常,程序就会被终止并退出.你可能会问,那有没有什么办法可以不终止程序,让其照样运行下去呢?答案当然是肯定的,这也就是我们所说的异常处理,通常使用 try 和 ex ...

  9. Python学习笔记六--文件和输入输出

    6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...

  10. Python学习笔记(六)Python的列表生成式、生成器

    列表生成式 List Comprehensions 列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式. 简单的数值范围的list可以使用一下方式生成: >>> ...

随机推荐

  1. 查看oracle归档日志路径

    转至:https://blog.csdn.net/u010098331/article/details/50729896/ 查看oracle归档日志路径 1.修改归档日志的格式 默认格式是:" ...

  2. Python:读取Excel表格时出现的u'\u51c6’ 无法正确显示汉字

    读取Excel后,想显示其中一行的元素,结果读出来是这样[u'\u51c6\u8003\u8bc1\u53f7', u'\u8003\u751f\u59d3\u540d'],始终不显示正常的汉字 依照 ...

  3. JZ-057-二叉树的下一个结点

    二叉树的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目链接: 二叉树的下一个结点 代 ...

  4. LeetCode-057-插入区间

    插入区间 题目描述:给你一个 无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例说明请见LeetCo ...

  5. 泛型的类型擦除后,fastjson反序列化时如何还原?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra~ 在前面的文章中,我们讲过Java中泛型的类型擦除,不过有小伙伴在后台留言提出了一个问题,带有泛型的实体的反序列化 ...

  6. 零基础,三个月内,找到??? java后端开发工作

    一.分析你的问题 出于尊重,先分析一下你的原问题吧,从您的问题,我提取到关键信息:"零基础"."三个月内"."找到工作",最后一个关键词&q ...

  7. quartz框架(六)-ThreadPool

    ThreadPool 本篇博文,博主将介绍Quartz框架中ThreadPool线程池相关的内容.线程池顾名思义,就是一个可以帮助我们来进行线程资源管理的对象.在web开发中,常见的就有数据库连接池, ...

  8. 分布式 PostgreSQL 集群(Citus)官方示例 - 多租户应用程序实战

    如果您正在构建软件即服务 (SaaS) 应用程序,您可能已经在数据模型中内置了租赁的概念. 通常,大多数信息与租户/客户/帐户相关,并且数据库表捕获这种自然关系. 对于 SaaS 应用程序,每个租户的 ...

  9. 手绘流程图,教你WSL2与Docker容器无缝互相迁移

    摘要:本文主要介绍WSL2与Docker容器无缝迁移镜像. 本文分享自华为云社区<WSL2与Docker容器,无缝互相迁移>,作者: tsjsdbd . 注:本文提到的WSL都是指WSL2 ...

  10. MySQL主从复制介绍:使用场景、原理和实践

    MySQL主从复制介绍:使用场景.原理和实践 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借 ...