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 断言 断言是一句必须等价于布尔真的判定;此外,发生异常也意味着表达式为假.这些工作类似于 ...
随机推荐
- 十八、CI框架之数据库操作update用法
一.代码如图: 二.访问一下 三.我们来查看数据库,已经被修改了 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.
- 新iPhone上市会让富士康迎来新一轮的“用工荒”吗?
新iPhone上市,在接下来的几个月内,中国制造会迎来一段非常忙碌或者说忙乱的日子,之所以说忙碌,是在于苹果的订单量常常大得吓人,而之所以说忙乱,则在于连同富士康.和硕.绿点科技等制造业巨头都可能遭遇 ...
- python导出oracle中的表内容,并生成excel文件
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; ### 如果oracle表中有中文输出,为防止乱码,执行脚本前,需要先制定字符集: #!/usr/bin/pyth ...
- Java执行js加密算法
Java执行js加密算法 今日需求:在后端执行一段加密算法,算法是js写的 明白需求以后疯狂百度.最后发现JDK提供了各种脚本的支持(怪笔者学艺不精,第一次见识到这个库,留下不学无术的泪水),正题开始 ...
- 在java中如何根据手机号查询号码归属地
1.maven项目中配置 <dependency><groupId>com.googlecode.libphonenumber</groupId><artif ...
- leetcode算法题121-123 --78 --python版本
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 实例输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能 ...
- 微信小程序官方示例 官方weui-wxss下载于安装 详解
1.小程序示例源码:https://github.com/wechat-miniprogram/miniprogram-demo 2.微信 weui下载地址:https://github.com/we ...
- JDK11 JAVA11下载安装与快速配置环境变量教程
https://blog.csdn.net/weixin_40928253/article/details/83590136 1.到Oracle官网下载jdk11,并安装.搜索“jdk",选 ...
- Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP
1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...
- PHP语言编写的磁力搜索工具下载BT种子 支持transmission、qBittorrent
磁力搜索网站2020/01/12更新 https://www.cnblogs.com/cilisousuo/p/12099547.html PT种子.BT种子搜索功能 IYUU自动辅种工具,目前能对国 ...