Python的try... excep异常捕捉机制
Python的try... excep异常捕捉机制
- 一、没有加入异常捕捉机制
- 二、加入try ... except 异常捕捉
- 1、已知错误类型 (例如下面已知列表索引错误类型`IndexError`)
- 2、未知异常的类型
- 三、try ... except ... else ... finally 使用
- 四、logging模块调用异常捕捉方法,保存异常信息日志
- 2、例子
- 五、常用的异常类型表
异常:
异常即非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序。
1、发生异常,不做处理:
def test_expect():ll = ["one", "two", "three"]print(ll[3])
if __name__ == '__main__':test_expect()
错误异常信息如下:
Traceback (most recent call last):File "D:/ZF/1_ZF_proj/python跳过异常继续执行.py", line 80, in <module>test_expect()File "D:/ZF/1_ZF_proj/python跳过异常继续执行.py", line 67, in test_expectprint(ll[3])
IndexError: list index out of range
2、使用try…except没有发生异常
def test_expect():ll = ["one", "two", "three"]try:print("没有发生异常:------------------")print(ll[2])print("发生异常,这里不执行:************")except Exception as e:print("只有try中发生异常,except才会执行")
if __name__ == '__main__':test_expect()
没有发生异常输出结果如下(只要没有发生异常,except中的语句就不会被执行
):
D:\software_install\Anaconda_install\python.exe D:/ZF/1_ZF_proj/python跳过异常继续执行.py
没有发生异常:------------------
three
发生异常,这里不执行:************
3、使用try…except发生异常
def test_expect():ll = ["one", "two", "three"]try:print("没有发生异常:------------------")print(ll[6])print("发生异常,这里不执行:************")except Exception as e:print("只有try中发生异常,except才会执行")
if __name__ == '__main__':test_expect()
发生异常输出结果如下(只要发生异常,就会从try发生异常的位置,跳到except语句中执行
):
D:\software_install\Anaconda_install\python.exe D:/ZF/1_ZF_proj/python跳过异常继续执行.py
没有发生异常:------------------
只有try中发生异常,except才会执行
4、查看异常信息的输出
一、没有加入异常捕捉机制
test_list = [1, 2]
print(test_list[3])
执行之后,会在控制台输出:IndexError
错误, 意思是超过了列表的索引范围
二、加入try … except 异常捕捉
1、已知错误类型 (例如下面已知列表索引错误类型IndexError
)
下面以一个列表索引的例子来讲述 try... except的用法
1、异常类型起别名
import logginglogging.basicConfig(level=logging.INFO,filename='Error.log',format='%(asctime)s - %(message)s')test_list = [1, 2]
try:print(test_list[2])
except IndexError as e:logging.error("索引越界:%s" % e)
我们知道捕捉的异常类型是IndexError
测试可以直接在except后面加上异常类型
在日志中保存捕捉的异常信息,Error.log 中保存的异常信息如下:
2019-04-18 14:24:19,109 - 索引越界:list index out of range
2、异常类型不起别名
import logginglogging.basicConfig(level=logging.INFO,filename='Error.log',format='%(asctime)s - %(message)s')test_list = [1, 2]
try:print(test_list[2])
except IndexError:logging.error("索引越界:%s" % IndexError)
在日志中保存捕捉的异常信息,Error.log 中保存的异常信息如下:
2019-04-18 14:36:47,177 - 索引越界:<class 'IndexError'>
3、把异常的类型和错误信息都输出
import logginglogging.basicConfig(level=logging.INFO,filename='Error.log',format='%(asctime)s - %(message)s')test_list = [1, 2]
try:print(test_list[2])
except IndexError as e:logging.error("索引越界:%s" % IndexError) # 输出错误的类型logging.error("索引越界:%s" % e) # 输出错误的信息
在日志中保存捕捉的异常信息,Error.log 中保存的异常信息如下:
2019-04-18 14:39:11,863 - 索引越界:<class 'IndexError'>
2019-04-18 14:39:11,863 - 索引越界:list index out of range
2、未知异常的类型
有些异常类型可能我们在事先之前并不知道,应该步捕捉呢,此时可以用 Exception
代替未知的异常类型,也就是Exception 和 IndexError其实就是等价的啦,只是我们看代码没有明显说明是什么异常类型而已
举例:
import logginglogging.basicConfig(level=logging.INFO,filename='Error.log',format='%(asctime)s - %(message)s')test_list = [1, 2]
try:print(test_list[2])
except Exception as e:logging.error("索引越界:%s" % IndexError)logging.error("索引越界:%s" % e)
在日志中保存捕捉的异常信息,Error.log 中保存的异常信息如下:
2019-04-18 14:50:49,419 - 索引越界:<class 'IndexError'>
2019-04-18 14:50:49,419 - 索引越界:list index out of range
三、try … except … else … finally 使用
try:
except:
else
: 只有不发生异常才会执行
finally
: 无论是否发生异常都会执行
import logginglogging.basicConfig(level=logging.INFO,filename='Error.log',format='%(asctime)s - %(message)s - %(module)s.py')test_list = [1, 2]
try:print(test_list[3])
except Exception as e:logging.error("索引越界:%s" % IndexError)logging.error("索引越界:%s" % e)
else:logging.info("只有不发生异常才会执行") # 程序不报错才会执行
finally:logging.info("无论是否发生异常都会执行") # 程序报不报错都会执行print("捕捉到错误,这里也是会执行的")
把异常的信息记录到日志中,之后下面的代码还会继续执行
在日志中保存捕捉的异常信息,Error.log 中保存的异常信息如下:
2019-04-18 19:06:26,820 - 索引越界:<class 'IndexError'> - error_catch.py
2019-04-18 19:06:26,821 - 索引越界:list index out of range - error_catch.py
2019-04-18 19:06:26,821 - 无论是否发生异常都会执行 - error_catch.py
四、logging模块调用异常捕捉方法,保存异常信息日志
logging模块,有两个方法可以直接保存异常的日志信息
- logging.error()
- logging.exception()
两个方法的文档:
def error(msg, *args, **kwargs):"""Log a message with severity 'ERROR' on the root logger. If the logger hasno handlers, call basicConfig() to add a console handler with a pre-definedformat."""if len(root.handlers) == 0:basicConfig()root.error(msg, *args, **kwargs)def exception(msg, *args, exc_info=True, **kwargs):"""Log a message with severity 'ERROR' on the root logger, with exceptioninformation. If the logger has no handlers, basicConfig() is called to adda console handler with a pre-defined format."""error(msg, *args, exc_info=exc_info, **kwargs)
2、例子
import logginglogging.basicConfig(level=logging.INFO,filename='Error.log',format='%(asctime)s - %(message)s - %(module)s.py')test_list = [1, 2]
try:print(test_list[2])
except Exception as e:logging.error(e)logging.info("----------------------------------------")logging.exception(e)print("捕捉到错误,这里也是会执行的")
在日志中保存捕捉的异常信息,Error.log 中保存的异常信息如下:
从日志内容可以看出:
logging.error()
: 输出的是简短的异常信息logging.exception()
:输出的是详细的异常信息
五、常用的异常类型表
异常 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
Exception类:是通用异常基类下列异常类均继承于Exception类,Python解析器会自动将通用异常类型名称放在内建命名空间中,所以当使用通用异常类型时,不需要import exceptions模块。
参考:
1、https://blog.csdn.net/zong596568821xp/article/details/78180229
2、http://www.runoob.com/python/python-exceptions.html
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠
Python的try... excep异常捕捉机制相关推荐
- java完成计算c=a/b 并输出结果 (java异常捕捉机制 )
文章目录 一.java异常处理 1. Java 的非检查性异常: 2.Java 定义在 java.lang 包中的检查性异常类: 3.捕获异常 二.小任务:完成c=a/b 的计算并输出c的结果 一.j ...
- Java异常捕捉机制
Java异常捕捉机制 1.简介 异常指的是程序运行时出现的非正常情况,Java中的异常捕捉最经常使用到的是try和catch两个代码块.本博客讲解的程序是工程训练基本任务1.4中的问题,该任务我是在4 ...
- 【JAVA】异常捕捉机制(2)—异常(Exception)的分类处理方式
一.前言 前面我们说到异常(Exception)的概念与分类,所谓异常就是程序在运行的过程中出现的一些中断程序的例外问题,我们将其称之为异常. JDK 中定义了很多派生于Throwable类的异常类, ...
- 代码行为异常容错机制与自我调节
目录 1.吧啦吧啦吧啦 1.1.代码自我意识 1.2.代码功能安全 1.3.代码保密性 1.4.代码执行完整性 1.5.代码的容错机制与自我调节 2.设计观与方法论 2.1 设计观与代码容错机制.自我 ...
- python的assert(断言)异常步骤机制
python的assert(断言)异常步骤机制 文章目录: 断言(assert): 就是判断expression 这个表达式语句是否正确,所以切记,断言是有一个判断的过程!!! 格式: assert ...
- 《C++ Primer 第五版》(第5.1-5.6节) ——异常处理机制(try语句块,throw表达式和catch异常捕捉处理单元)
1. 异常处理机制 C++中使用try,throw和catch三个关键字来实现异常的触发.抛出和处理的功能,具体通用语法形式如下: try{ if(true) normal program-state ...
- python中使用什么来实现异常捕捉_Python异常原理及异常捕捉实现过程解析
关于选课程序,最近着实有点忙,没机会复习os.pickle两部分模块,所以数据储存和字典读取成为了一个问题,大致原理知道,但是具体操作可能还是得返回去再好好看看,所以目前就提前开始学习新的知识了,虽然 ...
- python的read函数调用报错_从零开始学Python(七):文件存储I/O流和异常捕捉
这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序肯定离不开数据存储和网络两个模块,今天我们就先来讲讲python中的一种常见数据存储:文件存储!~! 文件存储(I/O操作) 何 ...
- 在python中、如果异常并未被处理或捕捉_Python异常处理总结
本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下: 1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果 ...
最新文章
- a.cmd 文件里的内容
- 尚学堂java 答案解析 第五章
- HDU-1258 Sum It Up DFS
- LeetCode-56-Merge Intervals
- win7计算机用户名在哪找,win7 c盘里找不到users,用户里也没有C:#92;User...-win7电脑c盘USERS文件夹在哪...
- 【jquery模仿net控件】初步GridView模型实现,及其简单应用
- # Schedulerx正式登陆Ali-k8s应用目录
- win7的开机启动项怎么管理 win7管理开启启动项的方法
- 嫌Python太慢了?让Cython带你飙车吧
- 搞不定的C语言--static的作用
- 对Vue生命周期的一些简单见解
- WINDOWS常用端口
- 你不可能没看过这10个设计师的文章
- 5、海康威视摄像头配置和初步测试
- MybatisPlus学习笔记
- 不知道如何写好作文?写好作文的十大技巧赶紧收好
- c语言 椭圆,C语言画圆椭圆
- 如何通过Matplotlib画圆
- 尝试搭建OPhone-sdk 手机模拟器的搭建
- venue11 Android,ebay购入dell 戴尔 venue11 pro 平板电脑
热门文章
- c++11 模板的别名
- html中embed标签的用法
- 动态修改数据窗口的数据源
- linux内核如何安装vim,如何在Linux 中安装和使用 PacVim?
- python3.6安装教程-python3.6环境安装+pip环境配置教程图文详解
- 安装完python后、还需要安装什么-初学 Python 需要安装哪些软件?
- python语言培训班-深圳Python语言培训班
- python爬取贴吧所有帖子-python 爬虫爬取百度贴吧,获取海量信息
- python怎么安装requests库-Python爬虫入门requests库的安装与使用
- python cookbook pdf下载-Python Cookbook 第3版 中文版.pdf