本节主要介绍Python中异常处理的原理和主要的形式。

1、什么是异常

Python中用异常对象来表示异常情况。程序在运行期间遇到错误后会引发异常。如果异常对象并未被处理或捕获,程序就会回溯终止执行。

2、抛出异常

raise语句,raise后面跟上Exception异常类或者Exception的子类,还可以在Exception的括号中加入异常的信息。

>>>raise Exception('message')

注意:Exception类是所有异常类的基类,我们还可以根据该类创建自己定义的异常类,如下:

class SomeCustomException(Exception): pass

3、捕捉异常(try/except语句)

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

一个try语句块中可以抛出多个异常:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except ZeroDivisionError:

print "The second number can't be zero!"

except TypeError:

print "That wasn't a number, was it?"

一个except语句可以捕获多个异常:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except (ZeroDivisionError, TypeError, NameError): #注意except语句后面的小括号

print 'Your numbers were bogus...'

访问捕捉到的异常对象并将异常信息打印输出:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except (ZeroDivisionError, TypeError), e:

print e

捕捉全部异常,防止漏掉无法预测的异常情况:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

print x/y

except :

print 'Someting wrong happened...'

4、else子句。除了使用except子句,还可以使用else子句,如果try块中没有引发异常,else子句就会被执行。

while 1:

try:

x = input('Enter the first number: ')

y = input('Enter the second number: ')

value = x/y

print 'x/y is', value

except:

print 'Invalid input. Please try again.'

else:

break

上面代码块运行后用户输入的x、y值合法的情况下将执行else子句,从而让程序退出执行。

5、finally子句。不论try子句中是否发生异常情况,finally子句肯定会被执行,也可以和else子句一起使用。finally子句常用在程序的最后关闭文件或网络套接字。

try:

1/0

except:

print 'Unknow variable'

else:

print 'That went well'

finally:

print 'Cleaning up'

6、异常和函数

如果异常在函数内引发而不被处理,它就会传递到函数调用的地方,如果一直不被处理,异常会传递到主程序,以堆栈跟踪的形式终止。

def faulty():

raise Exception('Someting is wrong!')

def ignore_exception():

faulty()

def handle_exception():

try:

faulty()

except Exception, e:

print 'Exception handled!',e

handle_exception()

ignore_exception()

在上面的代码块中,函数handle_exception()在调用faulty()后,faulty()函数抛出异常并被传递到handle_exception()中,从而被try/except语句处理。而ignare_exception()函数中没有对faulty()做异常处理,从而引发异常的堆栈跟踪。

注意:条件语句if/esle可以实现和异常处理同样的功能,但是条件语句可能在自然性和可读性上差一些。

python 异常处理 库_python异常处理详解相关推荐

  1. Python线性规划库Pulp的详解及应用示例

    Python线性规划库Pulp的详解及应用示例 线性规划是一种常见的优化方法,在商业.工程等领域有着广泛的应用.而Python作为一种高效.灵活的编程语言,也提供了丰富的线性规划库可供选择.本文将介绍 ...

  2. Python时间库—datetime的详解及使用

    一.概述 datetime库定义了2个常量和5个类.   常量名/类名 描述 2个常量 MINYEAR=1   AXYEAR=9999   5个类 date类 表示日期的类 time类 表示时间的类 ...

  3. pillow属于python标准库吗_详解Python图像处理库Pillow常用使用方法

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL ...

  4. python正则匹配_python 正则表达式详解

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  5. python traceback安装_Python Traceback详解

    刚接触Python的时候,简单的异常处理已经可以帮助我们解决大多数问题,但是随着逐渐地深入,我们会发现有很多情况下简单的异常处理已经无法解决问题了,如下代码,单纯的打印异常所能提供的信息会非常有限. ...

  6. python模块讲解_python模块详解 | filecmp

    原博文 2020-04-30 14:33 − 简介: filecmp是python内置的一个模块,用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单 两个主要的方法: filecmp.cm ...

  7. python模块讲解_python模块详解

    使用python时,常常会涉及到库的调用,这就需要掌握模块的基本知识. 本文分为如下几个部分概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝 ...

  8. python docx库安装_详解python中docx库的安装过程

    python中docx库的简介 python-docx包,这是一个很强大的包,可以用来创建docx文档,包含段落.分页符.表格.图片.标题.样式等几乎所有的word文档中能常用的功能都包含了,这个包的 ...

  9. [转载] 递归函数python基例_python递归函数详解 python 递归函数使用装饰器

    参考链接: Python递归 移动宽带检查显示 CRM,radius状态不一致是怎么回事啊?您可以把电信宽带猫等设备重启试一下,如果仍然不行,可以拨打10000号请工作人员帮您查看.处理. 电信宽带诊 ...

最新文章

  1. net.sf.json.JSONObject 和org.json.JSONObject 的差别
  2. windows server 2008 - 创建域和本机用户
  3. UVa1418 - WonderTeam(构造法)
  4. 浅谈企业MES与ERP系统集成
  5. java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)
  6. php中设置文件权限的写法,php图片上传,如何设置文件权限
  7. .net get set 初始化_.NET项目升级:可为空引用
  8. 武汉计算机应用中职学校,武汉市中职学校计算机应用基础课程抽考.Doc
  9. 用php向MySQL的datetime类型插入数据
  10. 视频编解码学习(六):YUV格式学习
  11. mysql5.7.11源码安装_centos 7.0安装MySQL Community Server 5.7.11 源码编译安装
  12. 怎么修改PDF文件中的图片以及文字
  13. python半圆代码_r或python中的半圆形色轮[闭合]
  14. java awt canvas_java.awt 类 Canvas - Java 中文参考手册
  15. 写项目时怎样将后台管理使用的富文本编辑器保存的内容转为HTML格式
  16. cnn和rnn可以结合使用吗,rnn和cnn优点缺点对比
  17. Blender:Lowpoly手部建模流程(附blender源文件下载)
  18. 中国燃料电池行业“十四五”规划及需求规模分析报告2021-2027年
  19. [设计模式] - 代理模式(静态代理与动态代理)
  20. javascript面向对象(三):class语法详解

热门文章

  1. 逻辑推理篇:数据分析中违背常理的悖论:辛普森悖论
  2. 第06课:动手实战基于 ML 的中文短文本分类
  3. 使用Scalatra创建Scala WEB工程
  4. LRU算法及Java实现
  5. 旅行场景下的个性化营销平台揭秘
  6. DataBinding基础使用二
  7. inode与ln命令
  8. Java安全编码之用户输入
  9. Delphi使用Indy、ICS组件读取网页
  10. linux系统服务器性能综合测试(UnixBench5)