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学习笔记之异常处理的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. python学习笔记目录

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

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

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

随机推荐

  1. IOS_OC_Category

    1.Category概述 那的Category的使用场景有那些呢: 1.类包括了非常多个方法实现,而这些方法须要不同团队的成员来实现 2.当你在使用基础类库中的类时,你不想继承这些类而仅仅想加入一些方 ...

  2. android:怎样用一天时间,写出“飞机大战”这种游戏!(无框架-SurfaceView绘制)

    序言作为一个android开发人员,时常想开发一个小游戏娱乐一下大家,今天就说说,我是怎么样一天写出一个简单的"飞机大战"的. 体验地址:http://www.wandoujia. ...

  3. 开启我的PHP学习之旅

    第二课 LAMP: Linux apache ngix PHP 第三课 搭建server方式: 1.集成安装环境 XAMPP软件包:www.apachefriends.org 2.单独配置 第四课 X ...

  4. C语言里全局变量管理

    C语言里信息封装比較弱,仅仅有静态变量的文件作用域. 假设不加约束.非常easy造成全局变量满天飞. 假设定义一个全局结构体.把全局变量都放到这个GlobleVariate里,应该好管一些,至少比裸奔 ...

  5. android屏幕适配之精准适配

    (1554068430@qq.com)(android精准适配工具)近期这段时间项目要做适配,在网上方便的方法.后来依据http://blog.csdn.net/jdsjlzx/article/det ...

  6. UVA LIVE 7146 Defeat the Enemy

    这个题跟codeforces 556 D Case of Fugitive思路一样 关于codeforces 556 D Case of Fugitive的做法的链接http://blog.csdn. ...

  7. Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决

    Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决 引言: 在Java中 ...

  8. spring:为javabean的集合对象注入属性值

    spring:为JavaBean的集合对象注入属性值 在 spring 中可以对List.Set.Map 等集合进行配置,不过根据集合类型的不同,需要使用不同的标签配置对应相应的集合. 1.创建 Ts ...

  9. [Apple开发者帐户帮助]三、创建证书(8)撤销证书

    您可以根据证书类型和角色撤消证书.有关详细信息,请转到撤消权限. 要了解撤销证书时会发生什么,请转到Apple Developer支持中的证书. 所需角色:帐户持有人或管理员. 在“ 证书”,“标识符 ...

  10. HDU1043 Eight

    题目: 简单介绍一下八数码问题:        在一个3×3的九宫格上,填有1~8八个数字,空余一个位置,例如下图: 1 2 3 4 5 6 7 8           在上图中,由于右下角位置是空的 ...