作用

程序遇到异常会退出,处理异常增加程序的健壮性

常见异常

NameError 尝试访问一个没有声明的变量

ImportError 无法引入模块或包;可能路径不存在

IndentationError 语法错误(的子类);代码没有正确对齐

SyntaxError 语法错误

IndexError 索引超出序列范围

KeyError 请求一个不存在的字典关键字

IOError 输入输出错误(比如你要读的文件不存在)

AttributeError 尝试访问未知的对象属性

ValueError 传给函数的参数类型不正确,比如给int()函数传入字符串类型

UnboundLocalError 试图访问一个还未被设置的局部变量

KeyboardInterrupt

语法

异常在try块里抛。

try有异常,执行 except ;try无异常,才会执行elsefinally:无论try块是否抛异常,永远执行的代码,通常用来执行关闭文件,断开服务器连接等功能。

例子

try代码块有错误则执行except代码块

except m,n:m为异常名称,e为变量,异常信息赋值给它

>>> try:

... r=10/0

... print('result is %f' % r)

... except ZeroDivisionError,e:

... print('ZeroDivisionError: %s' %e)

...

ZeroDivisionError: integer division or modulo by zero

一下代码均放在exception.py文件中

一旦捕获到即跳出try代码块,跳到对应的exception语句,except类似于if

try:

r=10/0

print('result: %f' % r)

except ZeroDivisionError, e:

print('%s' % e)

except NameError, e:

print('%s' % e)

print('end')

[root@hy tmp]# python exception.py

integer division or modulo by zero

end

try没有异常则跳到else语句

try:

r=10/0

print('result: %f' % r)

except ZeroDivisionError, e:

print('%s' % e)

except NameError, e:

print('%s' % e)

else:

print('no exceptions')

print('end')

[root@hy tmp]# python exception.py

integer division or modulo by zero

end

try:

r=10/1

print('result: %f' % r)

except ZeroDivisionError, e:

print('%s' % e)

except NameError, e:

print('%s' % e)

else:

print('no exceptions')

print('end')

[root@hy tmp]# python exception.py

result: 10.000000

no exceptions

end

try:

r=10/1

print aaa

print('result: %f' % r)

except ZeroDivisionError, e:

print('%s' % e)

except NameError, e:

print('result: %s' % e)

else:

print('no exceotions')

print('end')

[root@hy tmp]# python exception.py

result: name 'aaa' is not defined

end

无论try有没有捕获到异常,finally语句都会执行

try:

r=10/1

print aaa

print('result: %f' % r)

except ZeroDivisionError, e:

print('%s' % e)

except NameError, e:

print('result: %s' % e)

else:

print('no exceotions')

finally:

print('finally')

print('end')

[root@hy tmp]# python exception.py

result: name 'aaa' is not defined

finally

end

父类异常在前则只执行父类异常

try:

r=10/0

print('result: %f' % r)

except StandardError, e:

print('StandardError')

except ZeroDivisionError, e:

print('%s' % e)

else:

print('no exceotions')

finally:

print('finally')

print('end')

[root@hy tmp]# python exception.py

StandardError

finally

end

try:

r=10/0

print('result: %f' % r)

except ZeroDivisionError, e:

print('%s' % e)

except StandardError, e:

print('StandardError')

else:

print('no exceotions')

finally:

print('finally')

print('end')

[root@hy tmp]# python exception.py

integer division or modulo by zero

finally

end

raise自定义异常

>>> raise NameError('xxx')

Traceback (most recent call last):

File "", line 1, in

NameError: xxx

>>> try:

... raise NameError('xxx')

... except NameError, e:

... print e

...

xxx

>>> import sys

>>> try:

... 10/0

... except:

... res = sys.exc_info()

...

>>> print res

(, ZeroDivisionError('integer division or modulo by zero',), )

class CustomError(Exception):

def __init__(self,ErrorInfo):

super().__init__(self) #初始化父类

self.errorinfo=ErrorInfo

def __str__(self):

return self.errorinfo

if __name__ == '__main__':

try:

raise CustomError('客户异常')

except CustomError as e:

print(e)

class DatabaseException(Exception):

def __init__(self,err='数据库错误'):

Exception.__init__(self,err)

class PreconditionsException(DatabaseException):

def __init__(self,err='PreconditionsErr'):

DatabaseException.__init__(self,err)

def testRaise():

raise PreconditionsException()

try:

testRaise()

except PreconditionsException as e:

print (e)

上下文管理器

作用:简化释放资源时的异常语法

#上下文管理器协议

classSample:def __enter__(self):print("enter")#获取资源

returnselfdef __exit__(self, exc_type, exc_val, exc_tb):#释放资源

print("exit")defdo_something(self):print("doing something")

with Sample() as sample:

sample.do_something()

更简洁的用法

importcontextlib

@contextlib.contextmanagerdeffile_open(file_name):print("file open")yield{}print("file end")

with file_open("bobby.txt") as f_opened:print("file processing")

python异常类父类_python【第五篇】异常处理相关推荐

  1. python的类包括_Python的类,复杂吗

    是菜鸟学python的第38篇原创文章 阅读本文大概需要6分钟 高级语言都有面对对象,Python也不例外,比起c++,java这些传统的语言,Python中的面对对象去掉了很多复杂的东西,理解和使用 ...

  2. Python之路【第十五篇】:Web框架

    Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 ...

  3. python异常怎么处理_python中的异常怎么处理?

    Python中的异常怎么处理? 一.异常介绍 print("1---------------------") open("123.txt","r&qu ...

  4. python的类作用_python——类中的self到底的作用及三个应用场景

    class Test(object): def __init__ (self, val1): self.val0 = val1 def fun1(self): print(self.val0) def ...

  5. python modbus类封装_Python | 面向对象程序设计来了!

    当当当,技术小E又来了! 经过前几次的基础贴的培训 相信很多同学对python的基础知识 已经有了一个简单的认识 那么下面我们来讲一讲 python面向对象程序设计. 我们在写程序的时候一般有两种方式 ...

  6. c++ 标准异常类层次结构_Java入门教程十一(异常处理)

    在程序设计和运行的过程中,发生错误是不可避免的.尽管 Java 语言的设计从根本上提供了便于写出整洁.安全代码的方法,并且程序员也尽量地减少错误的产生,但是使程序被迫停止的错误的存在仍然不可避免.为此 ...

  7. python离群点检测方法分几类_数据分析 第五篇:离群点检测

    离群点(outlier)是指和其他观测点偏离非常大的数据点,离群点是异常的数据点,但是不一定是错误的数据点.确定离群点对于数据分析会带来不利的影响,比如,增大错误方差.影响预测和影响正态性. 从散点图 ...

  8. python释放类对象_Python 基本功: 10. 面对对象-类 Class

    虽然 Python 可以写函数式编程,但是本质上是一门面对对象编程语言 (object-oriented programming language),简称 oop.面对对象编程是把代码包装成一个对象 ...

  9. python子类初始化父类_Python实现子类调用父类的初始化实例

    前言 python中进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错. 例如以下的代 ...

  10. python import 类 继承_python学习之类的继承

    面向对象中一个重要的特性就是继承,继承的好处就是提高代码的重用率,减少不必要的代码.继承是父类与子类的关系,当子类继承了父类后,就具有了父类的所有变量和方法.在python中定义继承的语法是:clas ...

最新文章

  1. DXUT框架剖析(12)
  2. 简简单单的正则表单验证练习
  3. 逍遥法外第一季/全集How To Get Away With Murder迅雷下载
  4. 你知道从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)学废了吗?
  5. jquery可见性选择器(综合)
  6. JavaScript中带有示例的Math.log10()方法
  7. 爱慕内衣信息化颠覆流程重构供应链
  8. 小程序使用css变量,小程序使用css变量实现“换肤”方案
  9. JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)
  10. ICCV 2019 | 上海交大MVIG团队提出InstaBoost,换个dataloader函数, COCO提升3mAP
  11. [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析
  12. 开发人员安全问题_开发人员需要了解的安全性
  13. mysql 交换空间_MySQL优化纪录
  14. python助教评分问题_【1414软工助教】单元测试 得分榜
  15. Linux对象文件是个啥东东
  16. php exeil导入,反编译工具ILSpy.exe
  17. 基于51单片机的电子钟万年历LCD1602显示
  18. 超美二次元响应引导页源码
  19. 信工三行代码——红色底蕴与编程技术的火花
  20. 转行程序员日记---2020-09-18【,勿忘国耻】【回忆青春】

热门文章

  1. linux wc -l命令,Linux wc sort和uniq的用法
  2. classpath java配置_Java环境变量中classpath是必须配置吗?
  3. php mysql多条件查询界面_PHP组合查询多条件查询实例代码
  4. CONVERT TEXT(转换为可排序格式)
  5. 1.恶意软件中的防双开
  6. 第九篇 设计模式之装饰模式
  7. 2015年热恋的肉肉们
  8. bzoj1048 [HAOI2007]分割矩阵
  9. thinkphp5.0 session驱动方式问题汇总
  10. 浏览器CSS hack整理