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 ...
随机推荐
- 分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
微软官方有一套专门用于SharePoint 2010, Exchange 2010 Demo的虚拟机:SharePoint 2010: Information Worker Demonstration ...
- poj 1664 放苹果 (划分数)
题意:中文题目,不解释... 题解: 第一种方法是暴力深搜:枚举盘子1~n放苹果数量的所有情况,不需要剪枝:将每次枚举的情况,即每个盘的苹果数量,以字典序排序,然后存进set里 以此去重像" ...
- [深入学习C#]输入输出安全性——可变类型形參列表的变化安全性
可变类型形參列表(variant-type-parameter-lists) 可变类型形參列表(variant-type-parameter-lists )仅仅能在接口和托付类型上出现.它与普通的ty ...
- linux下apache+openssl配置记录
软件环境 Apache Httpd 2.2.29 (http://httpd.apache.org ) OpenSSL 1.0.1h (http://www.openssl.org/source ) ...
- 编程算法 - 和为s的连续正整数序列 代码(C)
和为s的连续正整数序列 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正数s, 打印出全部和为s的连续正数序列(至少含有两个数). 起 ...
- 一些求数据库对象的SQL语句
use [mydb] go --存储过程 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type='PROCEDURE' AND SP ...
- SQL 琐碎记录
1. 查看mysql现在已提供什么存储引擎: SHOW ENGINES ; 2. 查看mysql当前默认的存储引擎: SHOW VARIABLES LIKE '%storage_engine%'; 3 ...
- SQL数据库问题 解释一下下面的代码 sql 存储过程学习
SQL数据库问题 解释一下下面的代码 2008-08-13 11:30wssqyl2000 | 分类:数据库DB | 浏览1154次 use mastergocreate proc killspid( ...
- B3300 [USACO2011 Feb]Best Parenthesis 模拟
这是我今天遇到最奇怪的问题,希望有人帮我解释一下... 一开始我能得90分: #include<iostream> #include<cstdio> #include<c ...
- How to build CppCMS 1.x.x
How to build CppCMS 1.x.x Requirements Mandatory Requirements Recommended Dependencies Suggested Dep ...