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 断言 断言是一句必须等价于布尔真的判定;此外,发生异常也意味着表达式为假.这些工作类似于 ...
随机推荐
- Mybatis(1)-初识mybaits
一.概述 1.概述 mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动.创建连接.创建 state ...
- Python 操作csv和excel表格
1. 操作csv表格 使用的库 csv 1. csv文件里读取数据 代码 1. 以列表形式打开 import csv f = open('csv_test.csv', 'r') # 打开csv文件 c ...
- FFmpeg命令大全(更新中)
1.视频抽取音频: ffmpeg -i 3.mp4 -vn -y -acodec copy 3.aacffmpeg -i 3.mp4 -vn -y -acodec copy 3.m4a
- linux 安装禅道 和 CentOS 7 开放防火墙端口 命令
linux 安装禅道链接: https://www.cnblogs.com/maohuidong/p/9750202.html CentOS 7 开放防火墙端口 命令 链接:https://www. ...
- JavaScript中的深浅拷贝
深浅拷贝 在JS中,数据类型分为两类: 简单数据类型:Number.Boolean.String.undefined 引用数据类型:Array.Object.Function 简单数据类型通常 ...
- HDU_2604 矩阵快速幂 较难推的公式
一个排队问题,f代表女,m代表男,f和m出现的几率相等.问一个长为L的队伍不能出现 fmf 和 fff这样的串总共有多少种. 这个题目的公式递推略难啊...我看了别人博客才想明白原来是这么递推出来的. ...
- maven项目编译报错处理
1.问题一: [ERROR] Failed to execute goal on project data-common: Could not resolve dependencies for pro ...
- JAVA课程设计——俄罗斯方块
0.负责模块为可视化界面,技术栈为 (1)异常处理 (2)多线程 (3)文件存储 (4)Java swing 1.登陆界面 我的代码 import java.awt.Color; import jav ...
- hadoop cmd
一.hadoop文件操作 1.Ls hadoop fs -ls / 2.Put hadoop fs -put xx /path 3.Mkdir hadoop fs -mkdir 4.要从HDFS中删除 ...
- Ubuntu16.04 + ROS下串口通讯
本文参考https://blog.csdn.net/weifengdq/article/details/84374690 由于工程需要,需要Ubuntu16.04 + ROS与STM32通讯,主要有两 ...