Python学习笔记之异常处理
1、概念
Python 使用异常对象表示异常状态,并在遇到错误时引发异常。异常对象未被捕获时,程序将终止并显示一条错误信息
>>> 1/0
# Traceback (most recent call last):
# File "<pyshell#0>", line 1, in <module>
# 1/0
# ZeroDivisionError: division by zero
但是,使用异常的目的一般并不是为了单纯的显示错误信息
而是为了在发生异常的时候能够允许我们采取不同的方式进行处理,而不是放任整个过程
2、异常类型
(1)内置异常
| 异常类型 | 描述 |
|---|---|
| Exception | 几乎所有异常类的基类 |
| SyntaxError | 语法错误时引发 |
| TypeError | 将内置函数用于类型不正确的对象时引发 |
| ValueError | 将内置函数用于类型正确但包含的值不正确的对象时引发 |
| AttributeError | 引用属性失败时引发 |
| NameError | 找不到名称(变量)时引发 |
| IndexError | 使用序列中不存在的索引时引发 |
| KeyError | 使用映射中不存在的键值时引发 |
| OSError | 操作系统不能执行指定任务时引发 |
(2)自定义异常
其实,异常在 Python 中可以理解成一个对象,因此我们可以根据自己的需要定义一个异常类
注意异常类必须继承 Exception,下面的例子简单的继承 Exception,没有添加额外的操作
>>> class MyException(Exception):
pass
>>> try:
raise MyException('I am a exception')
except MyException as me:
print(me)
# I am a exception
3、异常处理
(1)try - except
我们可以使用 try - except 语句捕获和处理异常
一个没有指定异常名称的 except 语句可以捕获所有异常(但是一般不建议这样做,因为这样得不到任何有用的信息)
>>> try:
string = 'Hello'
num = int(string)
except:
print('exception')
# exception
(2)处理特定异常
在 except 语句后加上异常类的名称,表示处理特定的异常
其中,使用语句 except Exception 几乎能捕获所有的异常,因为 Exception 几乎是所有异常类的基类
>>> try:
li = list()
li.add(123)
except AttributeError as e:
print(e)
# 'list' object has no attribute 'add'
(3)处理多个异常
我们还可以使用多个 except 语句处理多个异常
此时要特别注意它们之间的排列顺序,因为当前面的 except 语句捕获到异常后,将不再执行后面的 except 语句
>>> try:
li = list()
li[0] = 123
except KeyError as e:
print(e)
print('handling error in KeyError')
except IndexError as e:
print(e)
print('handling error in IndexError')
except Exception as e:
print(e)
print('handling error in Exception')
# list assignment index out of range
# handling error in IndexError
(4)异常处理中的 else 语句
使用 else 语句表示没有捕获到异常的时候进行的操作
>>> try:
num = 1
except Exception as e:
print(e)
else:
print('Successful')
# Successful
(5)异常处理中的 finally 语句
使用 finally 语句表示无论是否捕获到异常都进行的操作
>>> try:
f = open('testFile.txt','w')
f.write('forTest')
except Exception as e:
print(e)
finally:
f.close()
4、异常与函数
异常与函数有着天然的关系!如果不处理函数中引发的异常,它将向上传播到调用函数的地方
如果在那里也没有得到处理,它将一直向上传递,直至到达主程序
如果主程序也没有处理该异常,则程序将自动终止并显示错误信息
>>> def faulty():
raise Exception('Error')
>>> def handle_exception():
try:
faulty()
except:
print('Exception Handled')
>>> def ignore_exception():
faulty()
>>> handle_exception()
# Exception Handled
>>> ignore_exception()
# Traceback (most recent call last):
# File "<pyshell#13>", line 1, in <module>
# ignore_exception()
# File "<pyshell#11>", line 2, in ignore_exception
# faulty()
# File "<pyshell#2>", line 2, in faulty
# raise Exception('Error')
# Exception: Error
【 阅读更多 Python 系列文章,请看 Python学习笔记 】
Python学习笔记之异常处理的更多相关文章
- 【Python学习笔记】异常处理try-except
Python异常处理 我们一般使用try-except语句来进行异常处理. 使用except Exception as err可以统一捕捉所有异常,而也可以分开处理单个异常. # 分开捕捉单个异常 t ...
- python学习笔记(异常处理)
上次提到正则表达式 当未匹配到数据返回值 None 再使用 match.group 会出现异常 AttributeError 为了避免异常我改成“ match != None” 这次加入异常处理 #! ...
- Python学习笔记9——异常处理
处理异常 如果执行到程序中某处抛出了异常,程序就会被终止并退出.你可能会问,那有没有什么办法可以不终止程序,让其照样运行下去呢?答案当然是肯定的,这也就是我们所说的异常处理,通常使用 try 和 ex ...
- python学习笔记(八):异常处理
一.异常处理 在程序运行过程中,总会遇到各种各样的错误.程序一出错就停止运行了,那我们不能让程序停止运行吧,这时候就需要捕捉异常了,通过捕捉到的异常,我们再去做对应的处理. 下面我们先写一个函数,实现 ...
- Python 学习笔记18 异常处理
我们在编码的过程中,难免会遇到一些错误和异常, 这时候程序会异常退出,并且会抛出错误信息: 比如: print(1/0) ''' 输出: Traceback (most recent call las ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- Python学习笔记进阶篇——总览
Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
随机推荐
- lzugis——Arcgis Server for JavaScript API之自己定义InfoWindow
用过Arcgis Server for JavaScript API肯定知道InfoWIndow.你在用InfoWindow的时候会发现各种问题,比如不能全然显示的问题,遮盖对象的问题等等.所以呢我在 ...
- dlk 模板
struct DLX { int n , m,size; int U[N],D[N],R[N],L[N],row[N],col[N]; int ans[N],S[N]; int ansd; void ...
- STL源代码剖析 容器 stl_stack.h
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie stack ---------------------------------------- ...
- bzoj 1800 & 洛谷 P2165 [AHOI2009]飞行棋 —— 模拟
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1800 https://www.luogu.org/problemnew/show/P21 ...
- hdu3652B-number(数位dp)
B-number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 从0开始学习BFC
为什么需要BFC? <style> .red { background: red; } .blue { background: #1890ff; } .green { background ...
- Python迭代器(斐波拉切数列实例)
将一个容器通过iter()函数处理后,就变成了迭代器.迭代器有2个魔法方法__iter__.__next__,一个迭代器必须实现__iter__,这个方法实际上是返回迭代器本身(return self ...
- A - High School: Become Human
Problem description Year 2118. Androids are in mass production for decades now, and they do all the ...
- springboot 的一般配置
import javax.servlet.Filter; import org.springframework.boot.SpringApplication; import org.springfra ...
- HttpServletResponse对象,自己学习的心得
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应response对象. request和response对象既然代表请求和响应,那我们要 ...