面向对象【day08】:异常处理(六)
本节内容
1、概述
2、异常梳理
3、异常梳理流程图
4、异常大全
5、自定义异常
一、概述
异常处理是当程序出错了,但是我们又不想让用户看到这个错误,而且我在写程序的时候已经预料到了它可以出现这样的错误,出现这样的错误代表着什么,我们可以提前处理这些个错误
二、异常处理
2.1 处理单个异常
语法如下:
|
1
2
3
4
|
try: code #处理的语句except Error1 as e: #遇到Error1执行下面的语句,在python2中写成except Error1,e print(e) |
代码如下:
|
1
2
3
4
5
6
7
8
|
name = [1,2,3]try: name[3] #不存在3这个下标值except IndexError as e: #抓取 IndexError 这个异常 print(e) #e是错误的详细信息#输出list index out of range |
2.2 处理多个异常
①写多个except,语法如下:
|
1
2
3
4
5
6
|
try: codeexcept Error1 as e: #处理Error1异常 print(e)except Error2 as e: #处理Error2异常 print(e) |
代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
name = [1,2,3]data = {"a":"b"}try: data["c"] #这边已经出现异常KeyError ,所以直接跳出code,跳到KeyError 下去处理 name[3]except IndexError as e: print(e)except KeyError as e: print(e)#输出'c' |
②写1个except,语法如下:
|
1
2
3
4
|
try: codeexcept (Error1,Error2,...) as e: print(e) |
代码如下:
|
1
2
3
4
5
6
7
8
|
try: data["c"] name[3]except (IndexError,KeyError) as e: print(e)#输出'c' |
注:第二种写法的用处:括号里面的所有错误,不管出现里面任何一种错误都用统一的处理方法。
2.3 Exception异常
语法如下:
|
1
2
3
4
5
6
|
try: codeexcept (Error1,Error2,...) as e: print(e)except Exception as e: #用Exception表示一下子抓住所有异常,这个一般情况下建议在异常最后面用,用在最后抓未知的异常 print(e) |
代码如下:
|
1
2
3
4
5
6
7
8
9
|
try: open("qigao.text","r",encoding="utf-8")except (IndexError,KeyError) as e: #没有IndexError,KeyError这两个异常 print(e)except Exception as e: #只能通过这个异常处理,Exception 抓住所有的异常 print(e)#输出[Errno 2] No such file or directory: 'qigao.text' |
2.4 else作用
作用:没有异常,则走else部分的逻辑代码
|
1
2
3
4
5
6
7
8
9
10
11
12
|
try: print("qigao,handson") #代码没有异常except (IndexError,KeyError) as e: print(e)except Exception as e: print(e)else: #没有异常出错,走else的逻辑代码 print("没有异常")#输出qigao,handson没有异常 |
2.4 finnally作用
作用:不管有没有错误,都会执行finnally中的代码
语法如下:
|
1
2
3
4
5
6
7
8
9
10
|
try: codeexcept (Error1,Error2,...) as e: print(e)except Exception as e: print(e)else: print("没有错误,执行")finnally: print("不管有没有错,都执行finnally") |
①没有异常情况
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
try: print("qigao,handson") #没有异常except (IndexError,KeyError) as e: print(e)except Exception as e: print(e)else: print("没有异常")finally: print("不管有没有错,都这行finnally")#输出qigao,handson没有异常不管有没有错,都这行finnally #没有报错,执行finnally |
②出现异常情况
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
try: data = {"a":"b"} data["c"] #data字典中没有'c'这个key值except (IndexError,KeyError) as e: print(e)except Exception as e: print(e)else: print("没有异常")finally: print("不管有没有错,都这行finnally")#输出'c'不管有没有错,都这行finnally #出错了也执行了finnally语句 |
三、异常处理流程图

四、异常大全
4.1 常用异常
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出异常;基本上是无法打开文件ImportError 无法引入模块或包;基本上是路径问题或名称错误IndentationError 语法错误(的子类) ;代码没有正确对齐IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键KeyboardInterrupt Ctrl+C被按下NameError 使用一个还未被赋予对象的变量SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)TypeError 传入对象类型与要求的不符合UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它ValueError 传入一个调用者不期望的值,即使值的类型是正确的 |
4.2 更多异常
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
4.3 ValueError
|
1
2
3
4
5
|
s1 = 'hello'try: int(s1)except ValueError, e: #python2.7的写法 print e |
五、自定义异常
5.1 自定义异常
|
1
2
3
4
5
6
7
|
class GaoError(Exception): #定义一个异常类,继承Exception def __init__(self,message): self.message = message def __str__(self): return self.message #给对象取一个名字 |
5.2 触发自定义异常
|
1
2
3
4
5
6
7
|
try: raise GaoError("数据库连接不上了") #触发自定义异常,GaoError("数据库连接不上了")这个对象except GaoError as e: print(e)#输出数据库连接不上了 |
自定义使用总结:
- 数据库连接不上的信息
- 权限问题,解析是没有权限了,给出异常提示
- 业务逻辑的错误
面向对象【day08】:异常处理(六)的更多相关文章
- python面向对象07/异常处理
python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...
- Python(六)面向对象、异常处理、反射、单例模式
本章内容: 创建类和对象 面向对象三大特性(封装.继承.多态) 类的成员(字段.方法.属性) 类成员的修饰符(公有.私有) 类的特殊成员 isinstance(obj, cls) & issu ...
- python基础——18(面向对象2+异常处理)
一.组合 自定义类的对象作为另一个类的属性. class Teacher: def __init__(self,name,age): self.name = name self.age = age t ...
- python学习笔记-(十一)面向对象进阶&异常处理
上篇我们已经了解了一些面向对象的基础知识,本次就了解下面向对象的一些进阶知识(虽然我也不知道有什么卵用). 静态方法 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使 ...
- 面向对象的异常处理之深入理解java异常处理机制
什么是异常? 异常是对问题的描述,将问题的对象进行封装: 异常体系的特点:异常体系中的所有类以及建立的对象: 都具有可抛性,也就是说可以被throw和throws关键字所操作,只有异常体系具有该特点: ...
- Python-Day7 面向对象进阶/异常处理/Socket
一.面向对象高级语法部分 1.静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里 ...
- day08(异常处理,创建异常,finally,throws和throw的区别)
异常处理, 异常的产生 运行时异常:程序运行中产生的异常:RuntimeException类. 编译时异常:程序在编译时产生的异常:除了RuntimeException类 其他都是编译时产生的 ...
- Python 中的面向对象和异常处理
在之前我们已经说过了 Python 中内置的主要的几种对象类型,(数,字符串,列表,元组和字典).而面向对象的核心人物还没出场呢 .那么我们常说的对象是什么类型的呢,其实他的类型就是“类”.继承封装和 ...
- python语言(七)面向对象、异常处理
一.异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常).程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关).如果捕捉成功则进入另外一个处理分 ...
- Java 面向对象(十六)
多线程 一.并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行, ...
随机推荐
- linux shell系列10 判断某个月中的星期六和星期天
#!/bin/bashread -p "请输入月份:" month #输入要查找的月份 mon=`date -d "0 month ago" +%m` #计算本 ...
- 51Nod 1344 走格子
参考自:https://www.cnblogs.com/ECJTUACM-873284962/p/6445381.html 1344 走格子 基准时间限制:1 秒 空间限制:131072 KB 分值: ...
- Python面试题练习
1.实现1--100之和 #解答一 print sum(xrange(101)) #解答二 s=0 for i in xrange(101): s = s + i print s 2.如何在一个函数内 ...
- Dirichlet's Theorem on Arithmetic Progressions POJ - 3006 线性欧拉筛
题意 给出a d n 给出数列 a,a+d,a+2d,a+3d......a+kd 问第n个数是几 保证答案不溢出 直接线性筛模拟即可 #include<cstdio> #inclu ...
- POJ 1966 Cable TV Network (算竞进阶习题)
拆点+网络流 拆点建图应该是很常见的套路了..一张无向图不联通,那么肯定有两个点不联通,但是我们不知道这两个点是什么. 所以我们枚举所有点,并把每个点拆成入点和出点,每次把枚举的两个点的入点作为s和t ...
- 「中国剩余定理CRT」学习笔记
设正整数$m_1, m_2, ... , m_r$两两互素,对于同余方程组 $x ≡ a_1 \ (mod \ m_1)$ $x ≡ a_2 \ (mod \ m_2)$ $...$ $x ≡ a_r ...
- 【XSY2528】道路建设 LCT 可持久化线段树
题目描述 给你一个\(n\)个点\(m\)条边图,\(q\)个询问,每次问你边权在\([l,r]\)之间的边组成的最小生成树(森林)的边权和.强制在线. \(n,m,q\leq 100000\) 题解 ...
- 使用ROME解析rss,如何获取icon图标
问题 网站使用SpringMVC框架,实现了RSS订阅,但是在阅读器里面,只有网站的标题,没有网站的图标. 分析 ROME会从<channel>标签下指定的<link>地址中, ...
- MT【300】余弦的三倍角公式
2017清华大学THUSSAT附加学科测试数学(二测)$\cos^5\dfrac{\pi}{9}+\cos^5\dfrac{5\pi}{9}+\cos^5\dfrac{7\pi}{9}$ 的值为___ ...
- QML 用QSortFilterProxyModel实现搜索功能
搞了一晚上终于实现了,写个博客纪念一下吧. c++部分的代码: #include <QQmlApplicationEngine> #include <QQmlContext> ...