python基础——异常处理及断言
python常见的异常类型?
异常有很多种类型,常见的由语法错误(SyntaxError)、类型错误(TypeError)、名字错误(NameError)等等,但我们要知道的是异常本身就是一个类的实例,所有的异常都继承于这个BaseException,在这个父类上又下分了下面四大类:
- SystemExit python退出异常
- KeyboardInterrupt 键盘打断(ctrl+c)
- GeneratorExit 生成器退出
- Exception 普通异常
我们常见的python异常基本上都属于普通异常。
异常处理的机制
在Python当中,若一个程序在运行的时候出错,Python解释器会自动的在出错的地方生成一个异常对象,而后Python解释器会自动的在出错地方的附近寻找有没有对这个异常对象处理的代码,所谓异常处理代码就是try……except语句,如果没有,Python解释器会自动的将这个异常对象抛给其调用函数,就这样层层抛出,如果在main当中也没有对这个异常对象处理的代码,Python解释器最后会做一个简单粗暴的处理,将整个程序给终止掉,并将错误的信息在显示屏上输出。
捕获异常,防止程序因报错而中断
通常都是使用try......except......来处理异常,将可能出错的代码放在try里,用except来捕获可能的错误类型,从而自定义提示报错语句。
try:
print ('start')
a = 1/0
print ('mid')
except Exception as a:
print (a)
print ('end')
start
division by zero
end
上面简单的例子可以看出,放在try的语句,一旦发现某一句有异常,后面的语句就不会再执行,然后会跳到except中来捕获这是一个什么异常类型。通常在我们不知道会出现什么异常类型时,我们就使用普通异常Except这个大范围,最后跳出except,继续执行后面的代码。
要注意的是,except后面可以只加‘:’,但这样就不会捕获出是什么异常。也可以加上具体的异常类型来捕获,更可以加上多种异常。
try:
print ('start')
a = 1/0
print ('mid')
except NameError as a:
print ("这个异常类型是:a")
except Exception as a:
print ("这个异常类型是:",a)
print ('end')
start
这个异常类型是: division by zero
end
加多个异常也可以用一个except,后面用括号包含多个异常。
except (NameError,TypeError,Exception) as a:
在捕获异常时,它会从上到下依次对比异常类型,找到之后就不会在往下找了。我们知道try里的语句出现错误时,会到except下捕获,但要是没有错误呢?事实上,在except后还能加上一个else,它会在try没有错误时来执行里面的代码。而在else后面,我们还能再加上finally,它是在无论try里面的语句有没有报错都会去执行。
try:
print ('start')
a = 2
print ('mid')
except NameError as a:
print ("这个异常类型是:a")
except Exception as a:
print ("这个异常类型是:",a)
else:
print ("try内语句没有问题")
finally:
print ("无论try内语句怎么样,我都会出现")
print ('end')
start
mid
try内语句没有问题
无论try内语句怎么样,我都会出现
end
自定义异常及主动抛出异常
我们可以自己定义一个异常类型,但这个异常类型必须继承于Exception。即使在没有报错的情况下,我们也可以自己抛出一个异常,格式为:raise 异常类型 。
class xiaxie(Exception):#自定义一个异常类型
pass
try:
print ('start')
a = 2
print ('mid')
raise xiaxie
except NameError as a:
print ("这个异常类型是NameError")
except xiaxie as a:
print ("这个是自定义的异常类型")
except Exception as a:
print ("这个异常类型属于:",a)
else:
print ("try内语句没有问题")
print ('end')
start
mid
这个是自定义的异常类型
end
断言
断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置。异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性。格式为:assert condition [,expression ]。一般情况下如assert (),这时会raise一个AssertionError出来,因为这时的condition为False。
应用场景:开发者所写的代码量大,但在编译时报出错误,又不能具体知道是哪出错了,这时可用断言来一步步检测代码。
python基础——异常处理及断言的更多相关文章
- python基础-异常处理
一.错误和异常 程序中难免出现错误,而错误分成两种 1.1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def te ...
- python基础 — 异常处理
什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常. 异常是Python对象,表示一个错误. 当Pyth ...
- python基础——异常处理、递归
异常处理 while True: try: num1 = int(input('num1:')) num2 = int(input('num2:')) result = num1 + num2 exc ...
- Python基础_文件的的处理及异常处理
今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数 open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- Python 基础之 异常处理
python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理? 先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...
- python异常处理和断言
http://blog.csdn.net/pipisorry/article/details/21841883 关于异常处理有必要么的讨论 最重要的问题是你在开发过程中隐藏了bug,如果当时你没加这个 ...
- python异常处理与断言以及日志模块
python异常处理与断言 目录: 1.异常处理 2.断言(assert) 3.日志模块(logging) 4.修改之前的车票信息查询,把日志模块.异常处理加进去 1.异常处理 代码如下: 语法: t ...
- (69)Python异常处理与断言
http://blog.csdn.net/pipisorry/article/details/21841883 断言 断言是一句必须等价于布尔真的判定;此外,发生异常也意味着表达式为假.这些工作类似于 ...
随机推荐
- Gym - 101142C CodeCoder vs TopForces(搜索)
题意:给定n个人在两个网站上的得分,一个人若能在任意一个网站里战胜另一个人,则认为这个人能战胜那个人.问每个人都能战胜多少人. 分析: 1.战胜具有传递性. 例如: 4 5 2 7 3 3 因为第三个 ...
- 萤火虫系统(firefly) RK3399 python3 安装 tensorflow
前言: 继续之前在RK3399上安装深度学习的一些环境,主要碰到的坑给大家分享一下,为了让大家少走弯路.这次是安装tensorflow,话不多说,直接开撸. --------------------- ...
- 转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读
军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存 ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目(一)
SpringCloud简单搭建 jdk:1.8开发工具:IDEA注:需要了解springcloud 1.创建最简单的Maven项目 1)开始创建一个新的项目 2)创建一个空模板的maven项目,用 ...
- CSU_1414 Query On a Tree BFS序+DFS时间戳进行预处理
2014 csu校赛 I 题,比赛的时候拿着他看了几个小时愣是没弄出好的方法,我们也想过统计出每个root的节点总数,然后减去离它d层的子节点的数目,即为答案.但是因为树的存储是无序的,所以每次为了找 ...
- (转)out.writer和out.print
JSP中out.write()和out.print()的区别 out对象的类型是JspWriter.JspWriter继承了java.io.Writer类. 1)print方法是子类JspWriter ...
- docker---Dockerfile编写
前言:镜像的定制实际上就是定制每一层所添加的配置文件,如果我们可以把每一层的修改.安装.构建.操作的命令都写入一个脚本,然后用这个脚本来构建.定制镜像,那么镜像构建透明性的问题.体积的问题就会得到解决 ...
- 框架-Spring及组件概念
1.什么是Spring Spring框架是一款开源java平台.创建于2003年,轻量级框架(基本版本只有2M). 使用Spring优点: (1) 使用POJOs开发,不再需要EJB容器:如果 ...
- 32. docker swarm 集群服务通信 之 RoutingMesh - internal 网络
1. 两个 service 是如何通信的 通过内置的 DNS 服务发现的功能 相互通信的 2. 创建一个 overlay 的 网络 docker network create -d overlay ...
- MJJ玩磁铁
题目: Problem D: MJJ玩磁铁 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 139 Solved: 9[Submit][Status][ ...