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 ...
随机推荐
- 整理100道 .net面试题
前段时间,我在准备面试的时搜到的一套 net开发人员面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需. 1. .NET和C#有什么区别 答:.NET一般指 ...
- 《JAVA程序设计》实训第一天——《猜猜看》游戏
课程实训是做一个猜猜看的小游戏.对于对代码不熟悉不了解的我来说的确挺难的.可是我还是会努力的. import java.awt.EventQueue; import javax.swing.JFram ...
- oc49--@class
// Person.h #import <Foundation/Foundation.h> @class Car; //#import "Car.h" // 由于imp ...
- How to Integrate .NET Projects with Jenkins
https://www.swtestacademy.com/jenkins-dotnet-integration/ 8) Unit Tests and Test Coverage Settings D ...
- 使用tortoisegit修改日志
http://stackoverflow.com/questions/17647936/how-do-i-edit-an-incorrect-commit-message-with-tortoiseg ...
- bzoj2595 [Wc2008]游览计划——斯坦纳树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2595 今天刚学了斯坦纳树,还不太会,写一道题练习一下: 参考了博客:http://www.c ...
- C++ 单例模式(读书笔记)
#include <iostream> class Singleton { static Singleton s; int i; Singleton(int x):i(x ...
- JavaScript中的+= 是什么?
+=表示相加并赋值,“i+=5”与“i=i+5”是等效的. 类似的运算符还有-=,*=,/=. i-=5等价于i=i-5; i*=5等价于i=i*5: i/=5等价于i=i/5.
- Winform 异步调用
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 【寒假集训系列DAY.1】
Problem A. String Master(master.c/cpp/pas) 题目描述 所谓最长公共子串,比如串 A:“abcde”,串 B:“jcdkl”,则它们的最长公共子串为串 “cd” ...