本节内容

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:
    code
except 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:
    code
except (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:
    code
except (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:
    code
except (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没有属性x
IOError 输入/输出异常;基本上是无法打开文件
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)
 
#输出
数据库连接不上了

自定义使用总结:

  1. 数据库连接不上的信息
  2. 权限问题,解析是没有权限了,给出异常提示
  3. 业务逻辑的错误

面向对象【day08】:异常处理(六)的更多相关文章

  1. python面向对象07/异常处理

    python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...

  2. Python(六)面向对象、异常处理、反射、单例模式

    本章内容: 创建类和对象 面向对象三大特性(封装.继承.多态) 类的成员(字段.方法.属性) 类成员的修饰符(公有.私有) 类的特殊成员 isinstance(obj, cls) & issu ...

  3. python基础——18(面向对象2+异常处理)

    一.组合 自定义类的对象作为另一个类的属性. class Teacher: def __init__(self,name,age): self.name = name self.age = age t ...

  4. python学习笔记-(十一)面向对象进阶&异常处理

    上篇我们已经了解了一些面向对象的基础知识,本次就了解下面向对象的一些进阶知识(虽然我也不知道有什么卵用). 静态方法 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使 ...

  5. 面向对象的异常处理之深入理解java异常处理机制

    什么是异常? 异常是对问题的描述,将问题的对象进行封装: 异常体系的特点:异常体系中的所有类以及建立的对象: 都具有可抛性,也就是说可以被throw和throws关键字所操作,只有异常体系具有该特点: ...

  6. Python-Day7 面向对象进阶/异常处理/Socket

    一.面向对象高级语法部分 1.静态方法     通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里 ...

  7. day08(异常处理,创建异常,finally,throws和throw的区别)

    异常处理, 异常的产生  运行时异常:程序运行中产生的异常:RuntimeException类.   编译时异常:程序在编译时产生的异常:除了RuntimeException类  其他都是编译时产生的 ...

  8. Python 中的面向对象和异常处理

    在之前我们已经说过了 Python 中内置的主要的几种对象类型,(数,字符串,列表,元组和字典).而面向对象的核心人物还没出场呢 .那么我们常说的对象是什么类型的呢,其实他的类型就是“类”.继承封装和 ...

  9. python语言(七)面向对象、异常处理

    一.异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常).程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关).如果捕捉成功则进入另外一个处理分 ...

  10. Java 面向对象(十六)

    多线程 一.并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行, ...

随机推荐

  1. BZOJ3224普通平衡树——旋转treap

    题目: 此为平衡树系列第一道:普通平衡树您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数, ...

  2. HDU4349-Xiao Ming's Hope-找规律

    打表输出前100之后,找到规律. 不过正确规律是1<<(二进制中1的个数). #include <cstdio> #include <algorithm> usin ...

  3. 洛谷P1622释放囚犯

    题目: 这个题很明显是一个区间DP,但是比较不同的是,这个题它很像区间DP的经典题——石子合并. 然后我傻傻的搞了这个题搞了一下午,然后几乎看遍了全网的题解,就只看懂了这个方法,可能是我太菜了吧,但是 ...

  4. 「AtCoder Grand018A」Getting Difference(GCD)

    题目链接A - Getting Difference 题意 有n(1~\(10^5\))个数\(A_i\) (1~\(10^9\)),每次选两个数,将它们的差的绝对值加入这堆数.问k(1~\(10^9 ...

  5. IIS最小配置

    目的 : IIS按需要配置练习      测试环境 IIS 10  WIN10 1.安装IIS与建立网站 安装IIS略,服务器版用添加角色,用户版添加删除WINDOWS组件. 装好IIS之后,建一个网 ...

  6. PHP慢日子查询

    2开启慢日志配置输出php-fpm慢日志,阀值为2秒:request_slowlog_timeout = 2slowlog = log/$pool.log.slow利用sort/uniq命令分析汇总p ...

  7. hasattr

    语法: hasattr(object,name) 检测类对象是否具有该name属性或方法

  8. 8、16、32-BIT系列单片机区别与特点

    一.8位单片机 8031/8051/8751是Intel公司早期的产品 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPR ...

  9. servlet 上下文

    一.应用需求: 如何统计网站在线人数? 使用ServletContext. 二.ServletContext详解: 1.是不同于session和cookie,是可以让所有客户端共同访问的内容,是在服务 ...

  10. js常见的排序算法

    最近面试可能会问这些 1,插入排序 function sort(elements){ var res =[elements[0]]; for (var i = 0; i < elements.l ...