一、异常处理

  1、异常的概念

   异常是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那个就会抛出异常,并且程序的运行随即终止。

  2、错误种类

    分两种,第一种是:语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正。

    常见语法错误:

 #TypeError:int类型不可迭代
for i in 3:
pass
#ValueError
num=input(">>: ") #输入hello
int(num) #NameError
aaa #IndexError
l=['egon','aa']
l[3] #KeyError
dic={'name':'egon'}
dic['age'] #AttributeError 属性错误
class Foo:pass
Foo.x #ZeroDivisionError:无法完成计算
res1=1/0
res2=1+'str' AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    第二种是:逻辑错误,这是我们今天重点需要探讨的。

  3、逻辑错误的异常处理

    3.1、异常处理的意义:保证程序的健壮性与容错性,即在遇到错误时程序不会崩溃。

    3.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('test.txt','r',encoding='utf-8')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
except StopIteration:
print('迭代出错')

二、try...except详解

  1、多分支:

    被检测的代码块抛出的异常有多种可能性,并且我们需要针对每一种异常类型都定制专门的处理逻辑。 

s1 = 'hello'
try:
int(s1)
except IndexError as e: # 将异常信息传给变量e
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)

  2、万能异常

    被检测的代码块抛出的异常有多种可能性,并且我们针对所有的处理逻辑只用一种就可以了。

s1 = 'hello'
try:
int(s1)
except Exception as e:
print('发生异常',e)

  3、可以在多分支后来一个Exception 

try:
#name
print('--->1')
l = [1,2,3,4]
#l[5]
print('--->2')
d = {}
#d['name']
print('---->3')
except NameError as e:
print('--->',e)
except IndexError as e:
print('--->',e) # list index out of range
except KeyError as e:
print('--->',e)
except Exception as e:
print('万能异常检测方法')
else:
print('没有发生异常时执行')
finally:
print('不管代码块是否有异常都会执行')
print('====== end ======')

  4、末尾加上finally的用处

try:
f = open('test.txt','r',encoding='utf-8')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
print(next(f),end=' ')
finally: # 资源回收时使用,不论是否发生异常都会执行
f.close()

  5、主动触发异常:raise,异常类型值

class People:
def __init__(self,name,age):
if not isinstance(name,str):
raise TypeError('名字必须为str类型')
if not isinstance(age,int):
raise TypeError('年龄必须为正整数')
self.name = name
self.age = age
p = People('cc',21)

  6、自定义异常

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)

  7、断言:assert 条件

assert 1 == 1
assert 1 == 2

小结:try...except

  保证了程序的安全性,不至于一点错误就导致整个程序崩溃,将错误和正常工作分开,更容易组织代码。

  

Python的常见异常处理的更多相关文章

  1. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

  2. python中的异常处理机制

    python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...

  3. Python 最常见的 170 道面试题解析:2019 最新

    Python 最常见的 170 道面试题解析:2019 最新 2019年06月03日 23:30:10 GitChat的博客 阅读数 21329 文章标签: PythonPython入门Python面 ...

  4. Python 入门 之 异常处理

    Python 入门 之 异常处理 1.异常处理 (1)程序中的错误分为两种 <1> 语法错误 (这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范 ...

  5. Python中常见的异常总结

    Python中常见的异常总结 当Python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常. 一.异常错误    a.语法错误     错误一:     if     ...

  6. Python 最常见的 170 道面试题全解析:2019 版

    Python 最常见的 170 道面试题全解析:2019 版 引言 最近在刷面试题,所以需要看大量的 Python 相关的面试题,从大量的题目中总结了很多的知识,同时也对一些题目进行拓展了,但是在看了 ...

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

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

  8. Java Socket常见异常处理 和 网络编程需要注意的问题

    在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...

  9. Python:常见错误集锦(持续更新ing)

    初学Python,很容易与各种错误不断的遭遇.通过集锦,可以快速的找到错误的原因和解决方法. 1.IndentationError:expected an indented block 说明此处需要缩 ...

随机推荐

  1. 《DSP using MATLAB》示例Example 8.12

    %% ------------------------------------------------------------------------ %% Output Info about thi ...

  2. 关于matlab中定点数overflow的处理办法

    定点数overflow的处理有两种办法:1,saturate,也就是说如果超过定点的最大值就取最大值,例如最大值是6结果是8,那么就取6:2,wrap,就是循环,如下图所示

  3. vb编写串口调试程序

    sub是子模块,可以调用但是没有返回值,function是有返回值的. public sub 可以在其它form里调用,而private sub 只能在当前form里调用. vb里的if else , ...

  4. 使用 Git 对原理图和线路板时行版本控制

    使用 Git 对原理图和线路板时行版本控制 由于之前一直用 Git 管理代码,我又开始试用 git 来对原理图和线路板时行版本控制. 由于 原理图和 PCB 的文件都是二进制文件,git 管理并不怎么 ...

  5. Java NIO简单介绍(二)

    上一篇<NIO简单介绍(一)>中讲解了NIO中本地IO相关的内容,这篇重点介绍的NIO的非阻塞式网络通信 一.阻塞与非阻塞 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read ...

  6. 利用Instrument Leak来发现App中的内存泄露

    XCode提供了一组用于检测内存,调试动画,布局等的工具.对于调试一些性能问题,内存问题非常方便.这里我们使用Leak来发现代码中的内存泄露. 在Leak中启动我们的应用开始监控: 注意,在监控的时候 ...

  7. ruby关于require路径

    ruby里面的require说明 require './aaaa' 这种方式,包含的是系统路径 相对路径得用下面的 require_relative "./xxxx" 或者使用这个 ...

  8. Java 静态对象 static

    什么是静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立. 然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了 ...

  9. 1、Window.document对象

    1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunmen ...

  10. if、while中变量的作用域问题

    我们知道,函数.类会改变当前变量的作用域.if,while等分支循环结构会继承外部作用域,即外部变量对分支循环结构内部可见. 但是C语言不支持if,while等分支循环结构内部作用域对外可见,而PHP ...