【学习笔记】python异常处理
时间:2019-02-17
本文章向大家介绍【学习笔记】python异常处理,主要包括【学习笔记】python异常处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.异常处理应用场景
1)内部代码异常抛出
2)应用于与外部资源进行交换的情况:
- 与计算机文件交互
- 与数据库进行交互
- 与外部进行http通信
2.Python的异常处理
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常进行。一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,就表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序就会终止执行。
错误实例
Traceback(most recent call last):
File "xxx.py",line 15,in<module>
print(a)
NameError:name "a" is not defined
NameError(错误类型:属性值):name “a” is not defined(错误信息)
3.Python异常处理方式
1).所有错误都捕获
try:
#代码段
print(a)
except:
#代码异常时候的处理方式,不然就跳过except段
#pass是什么都不做
pass
2).捕获错误类型,把错误类型赋值给e
try:
print(a)
except Exception as e:
print(e)
常规错误可以被划分到BaseException或者Exception里面
3).确定错误类型,针对每个类型进行处理
try:
print(a)
except NameError as e:
print(e)
4).不论是否有错误,都要执行finally里面的语句
try:
print(a)
except NameError as e:
print(e)
finally:
print("finally")
5).else用法
#对比1
#print(a)报错print("Hello")语句没有执行
try:
print(a)
print("Hello")
except NameError as e:
print(e)
else:
print("finally")
等同于
#print(a)报错print("Hello")语句没有执行
try:
print(a)
except NameError as e:
print(e)
else:
print("Hello")
用途:用于代码监控,把需要监控的代码放在try后面,else后面放不需要监控的代码,可以把错误信息划分出来。
6)总结
- except 语句不是必须的,finally语句也不是必须的,但是二者必须要有一个。否则就没有try的意义了
- 不建议在并不清楚逻辑的情况下捕获所有异常,有可能其中隐藏了严重的问题
- 程序异常处理用if判断来过滤内部错误
3.Python上下文管理器
一般来说,对于文件数据库socket等资源,打开连接的数量是有限的,在处理文件之后我们需要关闭这些资源。
方式1:
def manage_1():
f = open("test.txt","w")
f.write("普通版")
f.close()
这样有个问题,当文件处理中出现异常,无法执行close命令,该进程就会一直占用文件,
方式2:
def manage_2():
f = open("test.txt","r")
try:
f.write("普通版")
except IOError :
print("write error")
finally:
f.close()
使用try语句对错误进行捕获,把close语句放到finally里面,不是是否有错误,文件都会被关闭
方式3:
with方法
with open("test.txt") as file:
res = file.read()
print(res)
#判断文件是否关闭
print(file.closed)
上下文管理器
任何使用和enter() 和exit()方法的对象都可称为上下文管理器,上下文管理器对象可以使用with关键字,。文件file对象也实现了上下文管理器。
首先先构建一个File类,实现enter和exit方法
class File():
def __init__(self,filename,mode):
self.filename = filename
self.mode = mode
def __enter__(self):
print("enter")
self.f = open(self.filename,self.mode)
return self.f
def __exit__(self,*args):
print("exit")
self.f.close()
使用 with 语句
with File('out.txt', 'w') as f:
print("writing")
f.write("hello, python")
print(f.closed)
- 机器学习实战 | 第四章:模型验证和选择
- ofbiz中FreeMarkerWorker的makeConfiguration方法
- 后台进程(守护进程)自动备份PostgreSQL数据库
- 了解这些PHP小技巧吗?
- 结构体字节对齐
- 在Atom中设置Python开发环境
- Assignment 3 (神经网络) | 斯坦福CS231n-深度学习与计算机视觉课程
- ofbiz view渲染处理机制
- ofbiz方法一 条件查询createConditionList
- ofbiz的ant命令创建模块
- 几个不常用但特别实用的PHP预定义变量
- tomcat源码解读六 tomcat中的session生命历程
- tomcat源码解读五 Tomcat中Request的生命历程
- PostQueuedCompletionStatus
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 正则表达式入门
- (在模仿中精进数据可视化02) 温室气体排放来源可视化
- ROS机器人URDF建模
- 这是我见过最牛逼的Shell,619行代码!
- 设计模式(五):利用原型模式复制几个葫芦娃
- Vue中数组变动监听
- which命令
- 如何将tensorflow1.x代码改写为pytorch代码(以图注意力网络(GAT)为例)
- tomcat设置好环境变量,依然无法通过cmd startup命令启动
- python调用百度图片识别api
- [Go]GO语言实战-开源WEB客服GO-FLY-gorm下分页的实现
- [Go]GO语言实战-小程序或公众号接口gin框架验证微信服务器消息签名-开源WEB客服
- php一步一步实现mysql协议(一)——抓包本地mysql通信
- [MySQL] 利用explain查看sql语句中使用的哪个索引
- php一步一步实现mysql协议(二) ——握手初始化