异常处理(day8)

一、什么是异常
异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下
错误分成两种:
1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)
2.逻辑错误

二、异常的种类
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误
1、常用异常
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
2、更多异常

三、异常处理
为了保证程序的健壮性与容错性,即在遇到错误时程序不会崩溃,我们需要对异常进行处理,
1、如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防
AGE=10
while True:
age=input(‘>>: ‘).strip()
if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
age=int(age)
if age == AGE:
print(‘you got it‘)
break
2、如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理
try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
举个例子:
try:
f=open(‘a.txt‘)
g=(line.strip() for line in f)
print(next(g))
print(next(g))
print(next(g))
except StopIteration:
f.close()
3、常见的异常处理
1)异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。
s1 = ‘hello‘
try:
int(s1)
except IndexError as e: # 未捕获到异常,程序直接报错
print e
2)多分支
s1 = ‘hello‘
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
3)万能异常Exception
s1 = ‘hello‘
try:
int(s1)
except Exception as e:
print(e)
4)多分支异常与万能异常
4.1 如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么只有一个Exception就足够了。
4.2 如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。
5)也可以在多分支后来一个Exception
s1 = ‘hello‘
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
except Exception as e:
print(e)
6)异常的其他机构
s1 = ‘hello‘
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
#except Exception as e:
# print(e)
else:
print(‘try内代码块没有异常则执行‘)
finally:
print(‘无论异常与否,都会执行该模块,通常是进行清理工作‘)
7)主动触发异常
try:
raise TypeError(‘类型错误‘)
except Exception as e:
print(e)
8)自定义异常
class EgonException(BaseException):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg
try:
raise EgonException(‘类型错误‘)
except EgonException as e:
print(e)
9)断言:assert 条件
assert 1 == 1
assert 1 == 2
10)总结try..except
1:把错误处理和真正的工作分开来
2:代码更易组织,更清晰,复杂的工作任务更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

四、什么时候用异常处理
首先try...except是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的,这种东西加的多了,会导致你的代码可读性变差
然后异常处理只有在错误发生的条件无法预知的情况下,才应该加上try...except

原文地址:http://blog.51cto.com/10630401/2066531

时间: 2024-08-02 15:14:02

异常处理(day8)的相关文章

day8 网络编程 接口开发 异常处理

一 .在day7中已经讲了单个接口的开发,今天讲有关系的接口开发,也就是依赖性,比如你要在博客园写文章就必须先登录,登陆之后才能发表文章,那么登陆和发表文章之间就有个依赖关系,要做的就是这种开发: 1.接口开发首先要导入flask,导入我们用的着的方法 截图:__name__这里有必要解释一下,name前后是两个_不要写错 导入方法: 1.如果不嫌麻烦完全可以一级一级目录点出来, 2.也可以手动添加环境变量 3.就是可以用pycharm自动帮我们添加环境变量,右键选择Mark Directory

day8 (异常处理和网络编程)

一.异常处理 #1 什么是异常? # 异常是错误发生的信号,一旦程序出错,就会产生一个异常,应用程序未处理该异常, # 异常便会抛出,程序随之终止 #2.常见异常类型 #I:语法错误应该在程序运行前修正 # if 1 >2 # print('xxxxx') #II:逻辑错误 #x #NameError: name 'x' is not defined # l=[] # l[10000] #IndexError # class Foo: # pass # Foo.x #AttributeError

day8 异常处理

异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) 2.逻辑错误(逻辑错误) part2:什么是异常 异常发生之后 异常之后的代码就不执行了 什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) 如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

DAY8 - 异常处理,面向对象编程

网络编程 用基础的urllib包发送get请求: 输出为: 发送post请求: 输出为: 利用requests包来发送请求: 发送get请求: res.json()方法可以将得到的response返回成字典 输出为: 发送post请求: 输出为: 发送入参为json格式的post请求: 输出为: 发送带cookie的post请求: 输出为: 发送带Header的请求: 输出为: 如果请求的是一个url网页: 用res.text来返回一个字符串: 如果请求的返回是一个图片,音乐或者视频文件,那么实

文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述,基本分类 如下图所示: 类成员包括字段,方法,和属性 2.字段 如上图字段分为普通字段和静态字段,两者的使用有区别,但是最大的区别在于两者在内存中的保存位置有区别. 普通字段属于对象而静态字段属于类,在使用过程中谁的字段就由谁来调用. 静态字段和普通字段的定义如下: 在调用时分各自调用 #####类

python笔记 - day8

python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/articles/5017742.html 大纲 面向对象三大特性之多态 类成员之静态字段和普通字段 类成员之普通方法和静态方法以及类方法 类成员之属性 类成员之成员修饰符 类成员之特殊成员 其他之isinstance和issubclass 其他之super的应用 实例之自定义有序字典 单例模式 基本异常

Python基础篇-day8

本节目录1.抽象接口2.静态方法.类方法.属性方法3.类的特殊方法    3.1 __doc__ 表示类的描述信息(注释)    3.2 __module__ 和 __class__     3.3 __init__ 构造方法,通过类创建对象时,自动触发执行.    3.4 __del__    3.5 __call__ 对象后面加括号,触发执行    3.6 __dict__ 查看类或对象中的所有成员    3.7 __str__     3.8 __getitem__.__setitem__

接口开发、异常处理、网络编程

一.接口开发,有依赖关系的接口开发 1.场景:用户登录后发表文章 用户登录接口代码示例: import flask,time,json from lib import tools server = flask.Flask(__name__) @server.route('/login',methods=['get']) def login(): username = flask.request.values.get('username') pwd = flask.request.values.g

eight day1----模块和包,异常处理

复习 1 基础数据类型 2 int float... 3 list 4 dict set 字典通过key取值 5 for循环 while循环 条件语句 6 .. 7 文件操作: 8 with打开两个文件,会报错::最靠谱的close.open 9 打开模式 :记住 a w r ab wb rb即可 10 a w r --直接对字符串操作 11 ab wb rb---直接对字节操作 12 操作系统的编码和python编码不一致的乱码问题 13 函数: 14 函数基础: 15 定义时: 16 调用: