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 ...
随机推荐
- 大学,助你成长or 让你堕落?
不管是论坛.贴吧.还是博客,都或多或少能够看到诸如对大学教育的反思.抨击之类的文章.至于什么是大学,大学又该怎样度过.大学是助你成长还是让你堕落了?我想这应该是一个见仁见智的问题.作为一个过来人,结合 ...
- 浅谈 System.Decimal 结构
引言 我们知道,Microsoft .NET Framework 中的 System.Decimal 结构(在 C# 语言中等价于 decimal keyword)用来表示十进制数,范围从 -(296 ...
- crm使用soap启用和停用记录
function demo() { //操作记录的id var targetId = "a8a46444-ba10-e411-8a04-00155d002f02"; ...
- Pig 在 shell script中被调用,批量载入处理文件
首先,我想达到的目的是批量的处理一个目录下的的很多文档,这些文档保存了我要处理的数据,由于pig是初学..所以不知到该怎么批量的load,没有写过 自己的UDF,仅仅能一个一个文件的load,然后处理 ...
- CAS 4.0 配置开发手冊
1 下载 地址http://downloads.jasig.org/ cas-server-4.0.0-release.tar.gz cas-client-3.3.3-release.tar.g ...
- oc38--类工厂方法在继承中
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; ...
- 【SDOI 2010】 魔法猪学院
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1975 [算法] A*求k短路 [代码] #include<bits/stdc+ ...
- Ruby类扩张(extension)
创建: 2017/09/07 更新: 2017/09/16 修改标题字母大小写 ruby ---> Ruby 扩张类 class 类名 扩张的内容 end ...
- 使用idea2.5建立maven项目
使用idea的步骤: 1.建立一个新的maven项目 2.选中maven项目 3.点击next,输入groupID和artifactid 4.点击next 选择projectlocation 5.选 ...
- SHRINK SPACE Command : Online Segment Shrink for Tables, LOBs and IOTs
ORACLE-BASE - ALTER TABLE ... SHRINK SPACE Command : Online Segment Shrink for Tables, LOBs and IOTs ...