关于Python异常处理,你需要了解的知识点
什么是异常?
当Python检测到一个错误时,解释器就无法继续执行了,并且给出一个错误提示。比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然中断。这时候,就需要捕获处理它,否则程序会终止执行。
异常处理
使用try/except/finally语句进行捕获操作,并告诉Python发生异常时如何处理。
首先,检测try语句块中的错误,except语句捕获异常信息并处理。如果在try子句执行时没有发生异常,Python将执行else语句后的语句,然后控制流通过整个try语句。
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层,并打印缺省的出错信息。
语法格式
try:# 可能触发异常的语句块
except: # 后面跟一个错误类型,当代码发生错误且错误类型符合的时候,就会执行except中的代码,不写具体错误类型,表示接收任何类型的异常# 这里执行异常处理的相关代码,打印输出等
else:# 如果没有异常则执行else中的代码
finally:# 不管代码是否异常,都会执行,一般是资源的关闭和释放
excep 异常/错误 as 别名
,使用别名接收异常对象的错误信息。
如何捕获多个异常?
1.写出多行except 异常/错误
,指定捕获多个不同类型的异常。2.使用 except (异常1,异常2..)
,使用元组,在一行中捕获多个不同类型的异常。
异常捕获示例代码:
try:print(10/0)
except NameError:print('出现 NameError 异常')
except ZeroDivisionError:print('出现 ZeroDivisionError 异常')
except IndexError:print('出现 IndexError 异常')
except Exception as e :print('未知异常',e,type(e))
finally :print('无论是否出现异常,该子句都会执行')
抛出异常
我们使用raise语句触发自定义异常。
语法格式:
raise 异常类名(附加异常信息)
示例代码:
s = "asdfghjklqwe"
try:if len(s) > 10:raise Exception("超过10个字符")
except Exception as err:print(err)
自定义异常
系统的自带的异常只要触发就会自动抛出,有时候,用户自己决定什么时候抛出,并且给异常加上一些附加信息,这时候就可以使用自定义异常。
示例代码:
# 自定义异常类,创建一个类继承Exception
class MyError(Exception):pass
def add(a, b):# a小于0,抛出异常if a < 0:raise MyError('自定义的异常')return a + bprint(add(-1, 5))
异常定义好之后,与内置类的用法一样,在需要的时候raise出来就可以了。
常见的使用异常的场景
•网络请求相关,比如网络超时、连接异常等。•资源访问相关,比如文件的权限问题、文件的路径、文件是否存在等。•代码逻辑相关,比如越界访问、KeyError 等。
Python标准异常
异常名称 |
描述 |
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 |
用户代码生成的警告 |
推荐阅读
8 个 Python 高效数据分析的技巧
用Python求解线性规划问题
最全的 pip 使用指南,50% 你可能没用过。
关于Python异常处理,你需要了解的知识点相关推荐
- 简述python是怎么处理异常的-Python异常处理知识点总结
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions) ...
- python异常处理有什么意义_怎么学好Python异常处理 五种处理机制是什么
在Python无法正确处理程序时,就会发生异常;当发生异常时,我们需要捕获它并进行处理,否则程序会终止运行.但如何处理异常呢?有哪些方法?接下来的就给大家分享Python异常处理机制. 想要学好Pyt ...
- python示例异常处理与程序调试_笔记:Python异常处理与程序调试
Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...
- Python 异常处理--raise函数用法
Python 异常处理--raise函数用法 参考文章: (1)Python 异常处理--raise函数用法 (2)https://www.cnblogs.com/darkgui34/p/405074 ...
- python异常处理--try except else raise finally
python异常处理--try except else raise finally 参考文章: (1)python异常处理--try except else raise finally (2)http ...
- python 异常处理 try except
python 异常处理 try except 参考文章: (1)python 异常处理 try except (2)https://www.cnblogs.com/brave1/p/10252739. ...
- python异常处理(基础)
python异常处理(基础) 参考文章: (1)python异常处理(基础) (2)https://www.cnblogs.com/fnng/p/3518202.html 备忘一下.
- python处理流程-Python异常处理大全(二)
原标题:Python异常处理大全(二) 本文是Python异常处理教程的第二部分,上部分我们简单的介绍了几种异常,及其处理办法,这部分我们将更详细地对Python中产生的异常处理方法进行探讨. 函数使 ...
- python开发需要掌握哪些知识-Python基础进阶需要掌握哪些知识点?
Python基础进阶需要掌握哪些知识点?Python将是每个程序员的标配,有编程基础再掌握Python语言对于日后的升职加薪更有利.Python语言简洁利于理解,语法上相对容易能够让开发者更专注于业务 ...
- 十一、Python异常处理
Python异常处理 异常抛出机制,为程序开发人员提供了一种在运行时发现错误,进行回复处理,然后继续执行的能力 #!/usr/bin/python try: open('abc.txt') excep ...
最新文章
- csdn如何在开头生成目录
- 在一个夜黑风高的夜晚,坐在教室里学多线程
- 心得体悟帖---17、于迷茫低落处找到本心
- Rethinking Design Patterns - from Jeff Atwood
- Redis简介及配置文件介绍
- bert获得词向量_只需几行 Python 代码,即可用 BERT 玩转词嵌入!
- Ubuntu 20.04 安装CUDA11.1 和cudnn 8.0.5
- python真的是吹过了-被吹的神乎其神的Python到底都能干什么
- linux子进程杀不掉怎么办,LINUX KILL -9 杀不掉,求解决方法
- python分割图片、合并图片
- JAVA抓取商品价格_使用JAVA爬取京东商品价格
- 使用python制作时间戳转换工具
- 个人笔记使用(wolai,OneNote)
- Spark中资源与任务的关系
- python3 selenium web自媒体百家号企鹅号大鱼号acfun站,自动化上传视频以及经验总结分享
- 【原创】kettle转换组件杂记-【javascript组件】获取当前时间的前一天/后一天
- 解决‘vue‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件的方法
- 数据可视化(一)A股三大指数10年涨跌幅比较:数据爬取和整理
- iOS 识别车辆vin码方法汇总,免费并且效果极佳识别速度极快OCR识别VIN码
- java jersey介绍
热门文章
- jquery中的ajax如何接收json串形式的接口
- Git .gitignore文件忽略(自己做过测试了)
- Git本地与远程配对命令:两种 一种是在推送push时候配对 一种是新建分支checkout -b时候配对
- Linux之查看ubuntu版本
- php sql 二次注入,espcms 二次注入一枚
- python int函数详解,python int()函数
- PHP图片上传,框架通用
- 给array添加元素_前囧(06篇)Array 方法详解
- php如何在mysql数据库里创建表_php创建mysql数据库以及数据表
- 为什么非全站升级HTTPS不可?