Python学习笔记__8章错误、调试和测试__8.1章错误处理
# 这是学习廖雪峰老师python教程的学习笔记
1、概览
我们在运行程序或编写函数时,发生错误后,系统都会返回错误信息。我们可以通过某些机制,让错误信息更加明了
1.1、try
try机制的格式就是 try…except…finally。
try: # try: 运行这段代码,若代码有误,就执行except
print('try...')
r = 10 / 0
print('result:', r)
except ZeroDivisionError as e: # except:捕获指定的错误类型并赋值给变量e。except可以有多个
print('except:', e)
finally: # try 或 except 执行完后,执行finally
print('finally...')
注意:
Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。比如:
try:
foo()
except ValueError as e:
print('ValueError')
except UnicodeError as e:
print('UnicodeError')
第二个except永远也捕获不到UnicodeError,因为UnicodeError是ValueError的子类,如果有,也被第一个except给捕获了。
1.2、调用栈
$ python3 err.py
Traceback (most recent call last):
File "err.py", line 11, in <module>
main()
File "err.py", line 9, in main
bar('0')
File "err.py", line 6, in bar
return foo(s) * 2
File "err.py", line 3, in foo
return 10 / int(s)
ZeroDivisionError: division by zero
调用栈就是系统自己返回的错误信息。看调用栈,从上往下看。最后三行指明了错误的根源
1.3、记录错误
如果不捕获错误,可以让Python解释器来打印出错误堆栈,但程序也被结束了。
我们也可以捕获错误,把错误堆栈打印出来,然后分析错误原因,同时,让程序继续执行下去。
Python内置的logging模块可以非常容易地记录错误信息。
import logging
def foo(s):
return 10 / int(s) # 错误根源
def bar(s):
return foo(s) * 2
def main():
try:
bar('0') # main()调用bar(),bar()调用foo()。
except Exception as e:
logging.exception(e)
main()
print('END')
因为有 logging.exception(e)。执行 .py文件后。会继续执行,打印出“END”
1.4、抛出错误
错误是class,捕获一个错误就是捕获到该class的一个实例。所以,错误并不是凭空产生的,而是有意创建并抛出的。抛出的错误既可以是Python的内置函数定义的,也可以是我们自己定义的
1、第一种抛出:
# err_raise.py
class FooError(ValueError): # 定义了一个错误类
pass
def foo(s):
n = int(s)
if n==0:
raise FooError('invalid value: %s' % s) # 抛出自己定义的错误类
return 10 / n
foo('0') # 调用函数
2、第二种抛出:
# err_reraise.py
def foo(s):
n = int(s)
if n==0:
raise ValueError('invalid value: %s' % s) # 抛出ValueError错误
return 10 / n
def bar():
try:
foo('0')
except ValueError as e: # 捕捉错误
print('ValueError!')
raise # raise不带参数,把当前错误原样抛出。因为调用了foo(),所以抛给foo()
bar() # 调用函数
ValueError! # except捕获错误后的print
Traceback (most recent call last): #原样抛出错误,表现形式为协议栈
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in bar
File "<stdin>", line 4, in foo
ValueError: invalid value: 0 # foo()抛出捕获的错误
1.5、错误的转换
在except中raise一个Error,可以把一种类型的错误转化成另一种类型
try:
10 / 0
except ZeroDivisionError:
raise ValueError('input error!')
转载于:https://blog.51cto.com/12758568/2116869
Python学习笔记__8章错误、调试和测试__8.1章错误处理相关推荐
- Python学习笔记Day 3
Python学习笔记 Day 3 集合(关系测试.去重) 集合定义 关系测试-交集(&),并集(|),差集(-),子集,父集,对称差集(^) 增删查 增 .set.add(),.set.upd ...
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
- 【Python学习笔记—保姆版】第四章—关于Pandas、数据准备、数据处理、数据分析、数据可视化
第四章 欢迎访问我搞事情的[知乎账号]:Coffee 以及我的[B站漫威剪辑账号]:VideosMan 若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦. #编译器使用的是sypder,其中&q ...
- Python学习笔记:web开发1
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:网络编程
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用第三方模块3
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用第三方模块(1)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- OpenCV之Python学习笔记
RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...
- Python学习笔记:第十站 水晶球不调用不动
Python学习笔记 文章目录 Python学习笔记 第十站 水晶球不调用不动 1. 函数的创建和调用 2. 函数的参数传递 3. 函数的返回值 4. 函数的参数定义 5. 变量的作用域 6. 递归函 ...
- Python学习笔记:第四站 往哪走
Python学习笔记 文章目录 Python学习笔记 第四站 往哪走 1. 程序的组织结构 2. 顺序结构 3. 对象的布尔值 4. 分支结构 5. pass空语句 6. 本章作业 课程笔记参考B站视 ...
最新文章
- 机器人流程自动化(RPA)系统原理及特点
- VMware 虚拟机
- 生产性服务业的源起及内涵(制造服务业的前世今生之一)
- 用Visual C#来清空回收站(1)
- 如何用计算机弹逆战6,逆战星光弹夹使用方法介绍 轻松玩转星光弹
- arm处理器的历史及现状
- 分享自己写的一个贪吃蛇的游戏(Linux)
- 12家无人驾驶公司新进展:驾照怕白考了!
- nginx配置和前端跨域问题
- 相机技术公司Lytro获6000万美元D轮融资,阿里巴巴参投
- java获取路径中的文件名_3种Java从文件路径中获取文件名的方法
- 高中数学解析几何求轨迹常用的六种解题方法(实用干货)
- VS2010对话框中使用MSChart控件
- 概率论 计算机论文,《概率论与数理统计》毕业论文
- 混音师的混音之道|处理母带和混音的差别?母带处理的真相(上)|MZD Studios
- WordPress插件大合集会员收费下载/美化/卡密批量生成/积分功能 ErphpDown 包含9.42~~9.83版本
- 【NOI Online】 2021普及
- 【转载】【常见缺陷分析技术】基于ODC的软件缺陷度量研究
- Linux全套完整视频教程
- 数据系统架构-6.BI数据展示平台
热门文章
- MyBatis中传递数组参数和List参数时if-test判空和判断长度的写法
- C#中怎样将数组的顺序打乱随机排序
- Java中获取数据库中两个时间的相差秒数
- Vue实现仿音乐播放器4-Vue-router实现音乐导航菜单切换
- Python实现最简单的文字游戏
- erp二次开发有出路吗_ERP的真正技术瓶颈:详细生产排程!
- swoole mysql 并发_Swoole4 如何打造高并发的PHP7协程Mysql连接池?
- laravel翻看php日志,关于Laravel的日志用法
- Quarkus 0.12.0 发布,下一代 K8s 原生 Java 框架
- IC攻城狮求职宝典 01 2018年IC设计企业 笔试题 01 英伟达(Nvidia)