Python学习【第15篇】:面向对象之异常处理

python------------------异常处理

一、错误与异常

程序中难免会出现错误,而错误分为两种

1.语法错误:(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)

2.逻辑错误:(逻辑错误),比如用户输入的不合适等一系列错误

那什么是异常呢?

  异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下。异常发生之后,异常之后的代码就不执行了

异常种类:在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,

不同的类对象标识不同的异常,一个异常标识一种错误

常见的异常:

 1 ArithmeticError
 2 AssertionError
 3 AttributeError
 4 BaseException
 5 BufferError
 6 BytesWarning
 7 DeprecationWarning
 8 EnvironmentError
 9 EOFError
10 Exception
11 FloatingPointError
12 FutureWarning
13 GeneratorExit
14 ImportError
15 ImportWarning
16 IndentationError
17 IndexError
18 IOError
19 KeyboardInterrupt
20 KeyError
21 LookupError
22 MemoryError
23 NameError
24 NotImplementedError
25 OSError
26 OverflowError
27 PendingDeprecationWarning
28 ReferenceError
29 RuntimeError
30 RuntimeWarning
31 StandardError
32 StopIteration
33 SyntaxError
34 SyntaxWarning
35 SystemError
36 SystemExit
37 TabError
38 TypeError
39 UnboundLocalError
40 UnicodeDecodeError
41 UnicodeEncodeError
42 UnicodeError
43 UnicodeTranslateError
44 UnicodeWarning
45 UserWarning
46 ValueError
47 Warning
48 ZeroDivisionError

二、异常处理

1.什么是异常处理?      

python解释器检测到错误,触发异常(也允许程序员自己触发异常)

程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

2.为何要进行异常处理?

python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。

所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性

3.如何进行异常处理

首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正

①使用if判断

 1 num1=input(‘>>: ‘) #输入一个字符串试试
 2 if num1.isdigit():
 3     int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
 4 elif num1.isspace():
 5     print(‘输入的是空格,就执行我这里的逻辑‘)
 6 elif len(num1) == 0:
 7     print(‘输入的是空,就执行我这里的逻辑‘)
 8 else:
 9     print(‘其他情情况,执行我这里的逻辑‘)
10
11 ‘‘‘
12 问题一:
13 使用if的方式我们只为第一段代码加上了异常处理,但这些if,跟你的代码逻辑并无关系,这样你的代码会因为可读性差而不容易被看懂
14
15 问题二:
16 这只是我们代码中的一个小逻辑,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。
17 ‘‘‘

总结:

1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。

2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。

②python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

1.语法:

?


1

2

3

4

try:

     被检测的代码块

except 异常类型:

     try中一旦检测到异常,就执行这个位置的逻辑 

2.异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

?


1

2

3

4

5

s1 = ‘hello‘

try:

    int(s1)

except IndexError as e:

    print(e)<br>#没有捕获到异常,程序直接报错

3.多分支

 1 捕获异常
 2 num= input(‘num:>>‘)
 3 try:
 4     f= open (‘file‘,‘w‘)
 5     # int(num)
 6     # l = []
 7     # l[10000]
 8     # 1 / 0
 9     # dic = {‘k‘: ‘v‘}
10     # dic[‘k2‘]
11     print(‘-----------‘)
12 except ValueError :
13     print(‘请输入一个数字‘)
14 except NameError as name_e:
15     print(name_e)
16     print(‘=======‘)
17 except IndentationError as name_e:
18     print(name_e)
19 except IndexError as name_e:
20     print(name_e)
21 except SyntaxError as name_e:
22     print(name_e)
23 except ZeroDivisionError as name_e:
24     print(name_e)
25 except AttributeError as name_e:
26     print(name_e)
27 except KeyError as name_e:
28     print(name_e)
29 # except Exception as e:
30 #     print(e,‘异常了‘)
31 else: #如果上面出现问题了,就不执行else,如果都正确了就会执行else里的内容(支付过程可以用到else)
32     print(‘else 被执行‘)
33 finally:  #不过这段代码出没出问题,都执行这里的内容
34     f.close()
35 print(‘finally‘)

4.万能异常:可以捕获任意异常

?


1

2

3

4

5

s1 = ‘hello‘

try:

    int(s1)

except Exception as e:

    print(e)

5.主动触发异常

1 主动抛异常
2 try:
3     raise AttributeError(‘错啦错啦‘)
4 except AttributeError as e:
5     print(e)

6.自定义异常

1 class EgonException(BaseException):
2     def __init__(self,msg):
3         self.msg = msg
4     # def __str__(self):   可以不用写这个方法,因为那个BaseException父类里面已经实现了
5     #     return self.msg
6 try:
7     raise EgonException(‘egon出异常啦‘)
8 except EgonException as e:
9     print(e)

7.断言

1 断言:一个会抛出异常的判断,这个条件一旦成立就成立了,一旦不成立就报错了,就都不执行下面的了
2 assert 1==2
3 if 1==2:
4     print()
5 print(‘haha‘)

try..except的方式比较if的方式的好处

try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性

异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性

使用try..except的方式

1:把错误处理和真正的工作分开来
2:代码更易组织,更清晰,复杂的工作任务更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

三、什么时候用异常处理

try...except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的

这种东西加的多了,会导致你的代码可读性变差,只有在有些异常无法预知的情况下,才应该加上try...except,

其他的逻辑错误应该尽量修正

原文地址:https://www.cnblogs.com/kcwxx/p/10145191.html

时间: 2024-11-03 05:36:41

Python学习【第15篇】:面向对象之异常处理的相关文章

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python

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

Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(多线程与进程池) Python学习笔记——进阶篇[第九周]———线程.进程.协程篇(队列Queue和生产者消费者模型) Python学习笔记——进阶篇[第九周]———协程 Python学习笔记——进阶篇[第九周]———MYSQL操作

python学习[第十三篇] 条件和循环

python学习[第十三篇] 条件和循环 if语句 单一if 语句 if语句有三个部分构成,关键字if本身,判断结果真假的条件表达式,以及表达式为真或非0是执行的代码 if expression: expr_true_suite 条件表达式可以是多重的 通过布尔操作符 and or not来实现 单一语句的if 代码块,如果if语句的执行代码只有一行,可以放在一行来写 if expresssion: expr_tru_suite >>> if True: print True ... T

Python学习系列提升篇------字符串

字符串是python学习中重要的内容,在以后的工作中,对字符串的处理也必少不了.下面总结一下关于字符串学习的经验. 1.1 字符串的连接和合并 用' + '连接,将两个字符串相加.       合并,使用关键词 join 进行合并 1.2 字符串的切片和相乘 字符串相乘    字符串切片       1.3 字符串分割 普通分割.用split      复杂分割 1.4 字符串的查找与匹配 一般查找,用 find :可以很方便的在长的字符串里面查找子字符串,会返回子字符串所在位置的索引, 若找不

Python学习笔记——基础篇【第六周】——面向对象

Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,大家虽然都按老师讲的都知道OOP的三大特性是继承.封装.多态,并且大家也 都知道了如何定义类.方法等面向对象的常用语法,但是一到真正写程序的时候,还是很多人喜欢用函数式编程来写代码,特别是初学者,很容易陷入一

Python学习笔记——进阶篇【第八周】———异常处理

  引用链接:http://www.cnblogs.com/wupeiqi/articles/5017742.html isinstance(obj,cls) #判断实例是不是在类里 #类似代码 a=[1,2,3] if type(a) is list:print(a) 简便方法: class Foo(object): pass obj = Foo() isinstance(obj,Foo)  issubclass(sub,super) #检查sub是不是super的子类(很少用) class

Python学习笔记——基础篇【第七周】———FTP作业(面向对象编程进阶 &amp; Socket编程基础)

FTP作业 本节内容: 面向对象高级语法部分 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 参考:http://www.cnblogs.com/wupeiqi/p/4766801.html metaclass 详解文章:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python 得票最高那个答案写的非常好 Socket 编程 参考:http://www.cnblogs.co

Python学习:15.Python面向对象(二、继承的各种情况)

一.什么是继承 继承是一种创建类的方法,在python中,一个类可以继承来自一个或多个父.原始类称为基类或超类. #创建父类 class Parent1: pass class Parent2: pass # 继承父类,单继承 class Obj1(Parent1): pass #继承父类,多继承 class Obj2(Parent1,Parent2): pass 二.什么时候使用继承 在已经创建的几个类中,这几哥类中的方法和变量有相同的,这种时候我们就可以使用类的继承,将其它类中已有的方法和变

Python学习【第九篇】函数

函数 函数是什么? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上而下实现功能,其往往用一段代码来实现指定功能,开发过程中最常见的操作就是复制粘贴,就是将之前实现的代码块复制到现需功能处,如下: 1 while True: 2 if cpu利用率 > 90%: 3 #发送邮件提醒 4 连接邮箱服务器 5 发送邮件 6 关闭连接 7 8 if 硬盘使用空间 > 90%: 9 #发送邮件提醒 10 连接邮箱服务器 1

python学习【第一篇】python介绍

python发展历史 起源 Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣.用他的话说,尽管拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的活儿. 在那个时候,Guido接触并使用过诸如Pascal.C.Fortran等语言.这些语言的基本设计原则是让机器能更快运行.在80年代,虽然IBM和苹果已经掀起了个人电脑浪潮,但这