一、异常处理

在程序运行过程中,总会遇到各种各样的错误。程序一出错就停止运行了,那我们不能让程序停止运行吧,这时候就需要捕捉异常了,通过捕捉到的异常,我们再去做对应的处理。

下面我们先写一个函数,实现除法运算。

def calc(a,b):

    return a/b

print(calc(5,1))#调用,没有错误,结果是5.0

>>> 5.0

print(calc(5,0))#再次调用,这时候就不对了,因为被除数不能为0,下面报了一堆错,程序停止运行了

>>> ZeroDivisionError: division by zero

这个时候我们就需要捕捉异常了,如果除数是0的话,就提示用户传入的参数不对,重新传入。

捕捉异常使用try....except....关键字,就是你在写代码的时候,先要考虑到这段代码可能会出现什么样的错误,然后做对应的处理,try里面就是包含你做处理的代码,except里面就是出了某种错误的时候,我怎么去处理,下面我们改下代码,捕捉异常。

ef calc(a,b):

try:

res = a/b

except ZeroDivisionError as e:#如果是除数为0的错误,就返回除数不能为0,这个as e代表把返回错误的信息赋给e

return '除数不能为0!'

return res#这个是如果没有这个异常的话,就返回结果

print(calc(5,0))#这样再调用就不会出来错误了,就返回除数不能为0这个了。

上面就是捕捉异常,当然上面的只能捕捉到除数为0的错误,如果有别的错误就捕捉不到了;还有一个finally的用法,就是不管出不出异常都执行;try还有一个可以捕捉所有异常,还有else的用法,就是没出异常的时候怎么办,下面用代码来解释。

def calc(a, b):
try: # 捕捉异常
res = a / b
except ZeroDivisionError as e:
return '除数不能为0!'
except KeyError as e: # 捕捉KeyError这个异常,当然这段代码没用到字典,所以不会有keyerror这个错误,我只是举个例子
return 'keyerror错误'
except Exception as e: # 这个是捕捉所有的异常,不管你有什么异常都可以捕捉到
print('其他异常')
return e #返回错误信息
else: #这个else和上面的try对应的,也就是不出异常的话走这里
print('没有出异常')
return res
finally: #这个finally是不管这个段代码有没有出异常都走它
print('出没出异常都走我这里') print(calc(5, 0)) #出除数异常了,会返回除数不能为0!和执行finally里面的代码 print(calc(5, 1)) #这个没有出异常,就会走else里面的东西,返回结果,也会执行执行finally里面的代码 print(calc(5, 's')) #这个也走异常了,除数是字符串,肯定不能除,就走那个捕捉所有异常的代码了,也会执行执行finally里面的代码

二、常见的一些异常信息:

AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x

IOError:输入/输出异常,一般是无法打开文件

ImportError: 无法导入模块或包,一般是路径问题或名称错误

IndentationError:代码没有正确对齐,属于语法错误

IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3]

KeyError:试图访问字典里不存在的键

KeyboardInterrupt:Ctrl+C被按下

NameError:使用一个还未被赋予对象的变量

SyntaxError: 语法错误

TypeError: 传入对象类型与要求的不符

UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量

ValueError: 传入一个调用者不期望的值,即使值的类型是正确的

三、主动抛出异常

主动抛出异常,就是我们在代码里面让它自动抛出一个异常,然后捕捉到,比如说我们在写自动化测试脚本的时候,结果和预期不符合,就可以主动抛出一个异常信息,然后捕捉到,做其他的处理,主动抛出异常使用raise关键字。

try:

    raise KeyError#主动抛出一个keyerror的异常

except KeyError as e:

    print('这个是我主动抛出的异常')

  

  

  

python学习笔记8-异常处理的更多相关文章

  1. Python学习笔记之异常处理

    1.概念 Python 使用异常对象来表示异常状态,并在遇到错误时引发异常.异常对象未被捕获时,程序将终止并显示一条错误信息 >>> 1/0 # Traceback (most re ...

  2. 【Python学习笔记】异常处理try-except

    Python异常处理 我们一般使用try-except语句来进行异常处理. 使用except Exception as err可以统一捕捉所有异常,而也可以分开处理单个异常. # 分开捕捉单个异常 t ...

  3. python学习笔记(异常处理)

    上次提到正则表达式 当未匹配到数据返回值 None 再使用 match.group 会出现异常 AttributeError 为了避免异常我改成“ match != None” 这次加入异常处理 #! ...

  4. Python学习笔记9——异常处理

    处理异常 如果执行到程序中某处抛出了异常,程序就会被终止并退出.你可能会问,那有没有什么办法可以不终止程序,让其照样运行下去呢?答案当然是肯定的,这也就是我们所说的异常处理,通常使用 try 和 ex ...

  5. python学习笔记(八):异常处理

    一.异常处理 在程序运行过程中,总会遇到各种各样的错误.程序一出错就停止运行了,那我们不能让程序停止运行吧,这时候就需要捕捉异常了,通过捕捉到的异常,我们再去做对应的处理. 下面我们先写一个函数,实现 ...

  6. Python 学习笔记18 异常处理

    我们在编码的过程中,难免会遇到一些错误和异常, 这时候程序会异常退出,并且会抛出错误信息: 比如: print(1/0) ''' 输出: Traceback (most recent call las ...

  7. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  8. Python学习笔记进阶篇——总览

    Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...

  9. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  10. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

随机推荐

  1. 手动安装ettercap的过程

    知乎推送了一个中间人攻击的软件 ettercap 想着尝试进行一下安装学习, 如果有机会的话安全测试部分应该用的到. 1. 下载: wget https://codeload.github.com/E ...

  2. os模块+sys模块+random模块+shutil模块

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cdos.curdir ...

  3. p3c安装使用 编码规范扫描 阿里巴巴出品,挺好用的

    https://github.com/alibaba/p3c/wiki/IDEA%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3

  4. BZOJ4377[POI2015]Kurs szybkiego czytania——数学思维题

    题目描述 给定n,a,b,p,其中n,a互质.定义一个长度为n的01串c[0..n-1],其中c[i]==0当且仅当(ai+b) mod n < p.给定一个长为m的小01串,求出小串在大串中出 ...

  5. tensorflow_mmp

    搭建win10+py3.6+cuda9.1+cudnn7+tf1.5(如果想知道为什么这么搭配,自己去装两天就知道了) tensorflow_gpu......whl下载 剩下的官网下载,cuda9. ...

  6. BZOJ 5308 [ZJOI2018] Day2T2 胖 | 二分 ST表

    题目链接 LOJ 2529 BZOJ 5308 题解 这么简单的题 为什么考场上我完全想不清楚 = = 对于k个关键点中的每一个关键点\(a\),二分它能一度成为哪些点的最短路起点(显然这些点在一段包 ...

  7. BloodHound官方使用指南

    0x00  概观 1.BloodHound介绍 BloodHound是一种单页的JavaScript的Web应用程序,构建在Linkurious上,用Electron编译,NEO4J数据库是Power ...

  8. UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)

    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...

  9. P1186 玛丽卡 删边最短路最大值

    反正蛮水的一道题. 胡雨菲一句话让我的代码减少了10行还A了,之前的是个错的. 思路:先求出最短路,然后依次删去最短路上的每一条边,跑最短路求最大值. 关于删边:我的想法是当作链表删除,把last的n ...

  10. A1077. Kuchiguse

    The Japanese language is notorious for its sentence ending particles. Personal preference of such pa ...