Python异常基础
一、常见异常及场景举例
1.AssertionError
断言失败,断言是调试中常用(表示自己并不常用┑( ̄Д  ̄)┍)手段
举例:
def foo(s):
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n
foo(0)
上面代码就会输出AssertionError: n is zero!
方案:
一般是自己写的,检查设置断言(assert)的地方
2.AttributeError
访问了对象没有的属性
举例:
str_a = ''
str_a.decode()
上面代码会输出:AttributeError: 'str' object has no attribute 'decode'
方案:
检查报错相应行,和对应的对象。一般报错会有提示对象的类型。
3.IOError
输入输出异常,常见于文件操作
举例:
file = 'hello_world.txt'
f = open(file, 'r')
f.read()
f.close()
上面代码会输出:
python2:IOError: [Errno 2] No such file or directory
python3:FileNotFoundError: [Errno 2] No such file or directory
方案:
检查文件、文件路径、文件操作权限
4.IndexError
索引异常,一般是索引超出范围
举例:
list1 = [1, 2, 3]
print(list1[3])
上面代码输出IndexError: list index out of range
方案:
检查对应位置的对应类型的对象的值。比如是否获取到的列表为空?调试或者打印看看。
或者获取到的值和自己预想的不一样?是不是格式整齐的许多列表中出了一个叛徒?
5.ImportError
模块或者包引入错误
整个错误很常见,不举例了
方案:
检查是否包没有安装?python不同版本的同一功能的模块是否叫法不一样?
模块名的大小写有没有问题?模块路径对不对?
6.IndentationError
代码没有正确对齐
举例:
list1 = [1, 2, 3]
print(list1)
方案:
检查缩进。冒号下一行是不是没缩进?同一代码块缩进格数不一样?是不是用了tab缩进,空格出问题了?
7.NameError
对象未声明/初始化,属性不存在
举例:
print a
方案:
python不用额外声明变量,检查一下有没有初始化。另外,注意一下作用域。
在类里面的时候,检查属性是不是在普通方法里面用到的,而没在__init__()中初始化。
8.SyntaxError
python语法错误
不举例了,没意思
方案:
检查各种括号、冒号等标点符号,是不是用了中文标点?全角半角有没有问题?
看下python环境,版本有没有用错,比如python3中使用print。。
9.TypeError
类型错误
举例:
num1 = ''
print(num1 + 1)
方案:
检查类型使用。是不是数字当字符串了?是不是参数传错了?
10.WindowsError、OSError、SystemError
系统调用失败、操作系统错误、解释器系统错误
检查解释器有没有问题,操作系统权限有没有
二、处理异常语句
Python处理异常相关语句try、except、else、finally
1.try:
捕捉异常,捕捉到异常后转入except处理
感觉某块代码会有异常时,就捕捉。
2.except:
处理异常,对捕捉到的异常进行处理,在try里面出现异常时进入该语句块
可以跟异常类型,如 except NameError,只处理相应类型的异常,类型不对,则异常继续抛出
python2中except NameError,e:
python3中except NameError as e:
不跟类型时,啥异常都处理
可以嵌套多个,会从上到下一个一个匹配
不想处理的时候用pass
3.else:
无异常时执行,在try里面没有出现异常时进入该语句块
4.finally:
退出try时执行,不管有没有异常退出try时都执行。
与try配对,一个try只能有一个,一段程序中多个try可以有多个finally。
当程序异常退出时finally也能执行,因为异常退出时,说明try没有准确捕捉异常,但是try已经试图捕捉过,退出try时仍然会执行finally,然后再把异常向上抛出。
三、异常处理顺序
异常从内到外捕捉,一层一层向上抛出。都没抓到就报错。
如:
try:
# 他没捉到我再捉
try:
# 我先捉
except Exception:
# 有问题在我这处理,不该我背的锅就甩出去
except:
# 我处理里面没抓到的问题,处理不了的锅同样甩出去
else:
# 没什么问题,就我来说句,
# 有问题我就静静地看你们甩锅
finally:
# 不管怎样我来总结一下
四、手动引发异常
1.语句 raise
raise后面可以跟异常,也可以不跟
raise执行之后就抛出异常,一般情况下程序终止
使用try...except...语句捕捉raise抛出的异常,和普通异常一样处理
2.手动引发异常的原因
1)你喜欢,你就引发个异常
2)你不让别人这么做,就引发个异常
3)这个不合理,我引发个异常
看到一句话,觉得很有道理,摘抄:
所有的异常都是主动抛出的,只是不是你抛出的。
比如说python的各种异常,就是python主动抛出的,把python看做一个和我们一样的人,只不过是它在制定游戏规则而已。
主动引发异常因情况而定。很多情况会用在制定规则、测试、终止程序等等。
五、自定义异常
使用一个类继承Exception即可自定义异常
Exception是异常类的基类,BaseException是Exception的基类。
比如说
class MyException(Exception):
pass try:
raise MyException('hello!')
except MyException as e:
print(type(e))
print(e)
自定义的异常,和python定义的异常,一样用。
Python异常基础的更多相关文章
- Python——异常基础
异常基础 在Python中,异常会依据错误自己主动地被触发.也能由代码触发和截获.异常由五个语句处理: 1.[try/except]:捕捉由Python或你引起的异常并恢复. 2.[try/final ...
- Python异常(基础) except
为什么要异常处理机制:在程序调用层数较深时,向主调函数传递错误信息需要层层return 返回比较麻烦,用异常处理机制可以较简单的传送错误信息 什么是错误 错误是指由于逻辑或语法等导致一个程序已无法正常 ...
- Python 异常机制
1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! try: pass # 程序正常执行时做什么操作 ...
- 零基础学Python--------第2章 Python语言基础
第2章 Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...
- Python学习基础笔记(全)
换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...
- Python 入门基础6 --字符编码、文件操作1
今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- Python 从基础------进阶------算法 系列
1.简介 关 ...
- Python开发基础-Day23try异常处理、socket套接字基础1
异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...
随机推荐
- bug记录:IE8,包含块min-height/height共存时的高度计算bug
问题的条件有: A元素是B元素的包含块. A元素设置overflow:hidden;,并同时设置了height和min-height,同时height计算值 < min-height 原生IE8 ...
- ArcGIS Desktop和Engine中对点要素图层Graduated Symbols渲染的实现 Rotation Symbol (转)
摘要 ArcGIS中,对于要素图层的渲染,支持按照要素字段的值渲染要素的大小,其中Graduated Symbols可以对大小进行分级渲染.在个人开发系统的过程中,也可以用来美化数据显 ...
- python DDT读取excel测试数据
转自:http://www.cnblogs.com/nuonuozhou/p/8645129.html ddt 结合单元测试一起用 ddt(data.driven.test):数据驱动测试 由外部 ...
- 全排列——DFS实现
原创 之间就写过一篇全排列的博客:https://www.cnblogs.com/chiweiming/p/8727164.html 详细介绍请回看,用的方法(暂且就叫)是“交换法”,其实思路就是DF ...
- springcloud提供开放api接口签名验证
一.MD5参数签名的方式 我们对api查询产品接口进行优化: 1.给app分配对应的key.secret 2.Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下: a. 按照请求参数 ...
- SurfaceView和SurfaceHolder的基本用法
仅做记录使用,新手也可以来看看,怎么得到一个surfaceholder. 1.在xml文件中增加一个surfaceView控件. <SurfaceView android:layout_widt ...
- arp欺骗进行流量截获-1
这边博文主要讲一下怎么使用arp欺骗进行流量截获,主要用于已经攻入内网以后,进行流量监听以及修改. 一.什么是arp arp协议是以太网的基础工作协议,其主要作用是是一种将IP地址转化成物理地 ...
- day08.4-samba共享网盘服务
1. 安装软件:yum install samba -y 2. 新建共享目录物理路径:mkdir /zizaijiapu 修改配置文件:vim /etc/samba/smb.con ...
- react.js学习之路五
最近没时间写博客,但是我一直在学习react,我发现react是一个巨大的坑,而且永远填不完的坑 关于字符串的拼接: 在react中,字符串的拼接不允许出现双引号“” ,只能使用单引号' ',例如这样 ...
- Python实现——一元线性回归(梯度下降法)
2019/3/25 一元线性回归--梯度下降/最小二乘法_又名:一两位小数点的悲剧_ 感觉这个才是真正的重头戏,毕竟前两者都是更倾向于直接使用公式,而不是让计算机一步步去接近真相,而这个梯度下降就不一 ...